У меня есть следующий код в файле 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;
}
3 ответа
Это заблудший | это способ Perl сказать, что вы хотите, чтобы вывод этой команды был доступен вашей программе. Есть несколько эквивалентных форм.
Взгляните сюда: open - perldoc.perl.org. Особенно в строке, которая гласит:
open(FOO, "cat -n '$file'|");
open(my $FOO, "foo");
Открывает файл для чтения, а
open(my $FOO, "foo |");
Сообщите Perl, что foo
- это команда для запуска, вывод которой должен быть передан в дескриптор файла $FOO
.
Поскольку open (FOO, «foo |») просто считывает из FOO вывод команды foo, каждая строка в выводе команды foo станет строкой в файле FOO. Следующее будет идентично команде оболочки ps -ef:
open(PS, 'ps -ef |');
while (<PS>) { print $_ }
Команда во 2-й строке вашего образца - это оболочка, фильтрующая список для создания на запущенных экземплярах 'deploy.sh', если в файле есть строка, то экземпляры все еще работают, поэтому она читает только первую строку ввод в переменную $ temp.
Похожие вопросы
Новые вопросы
perl
Perl - это процедурный высокоуровневый динамический язык программирования общего назначения, известный своей собственной поддержкой регулярных выражений и возможностей синтаксического анализа строк. Пожалуйста, используйте этот тег для вопросов о Perl в целом. Для вещей, связанных с новым (но связанным) языком Raku (ранее «Perl 6»), используйте тег raku. Для регулярных выражений в стиле Perl на других языках используйте тег regex или, если они основаны на библиотеке PCRE, тег pcre.