У меня есть следующий код в файле Perl .pl. Как вы думаете, есть ли проблема с этим кодом (я не могу понять, как он будет работать, поскольку во второй строке есть символ "|" без следующей за ним команды)

while ( $temp ne "" ) {
        open( PS, "ps -ef | grep deploy.sh | grep ssh | grep -v grep|" );
        $temp = <PS>;
        close(PS);
        print "The Deploy scripts are still running.  Now sleeping 20\n";
        sleep 20;
}
0
AKS 23 Ноя 2014 в 04:57

3 ответа

Лучший ответ

Это заблудший | это способ Perl сказать, что вы хотите, чтобы вывод этой команды был доступен вашей программе. Есть несколько эквивалентных форм.

Взгляните сюда: open - perldoc.perl.org. Особенно в строке, которая гласит:

open(FOO, "cat -n '$file'|");
7
Daniel 23 Ноя 2014 в 02:03
open(my $FOO, "foo");

Открывает файл для чтения, а

open(my $FOO, "foo |");

Сообщите Perl, что foo - это команда для запуска, вывод которой должен быть передан в дескриптор файла $FOO.

5
ikegami 23 Ноя 2014 в 05:52

Поскольку open (FOO, «foo |») просто считывает из FOO вывод команды foo, каждая строка в выводе команды foo станет строкой в ​​файле FOO. Следующее будет идентично команде оболочки ps -ef:

open(PS, 'ps -ef |');
while (<PS>) { print $_ }

Команда во 2-й строке вашего образца - это оболочка, фильтрующая список для создания на запущенных экземплярах 'deploy.sh', если в файле есть строка, то экземпляры все еще работают, поэтому она читает только первую строку ввод в переменную $ temp.

1
Jose Rey 23 Ноя 2014 в 15:13