Как получить возвращаемое значение при использовании awk в Perl-скрипте? - PullRequest
0 голосов
/ 24 марта 2011

Я пытаюсь отправить в $ process результат этого системного вызова

my $process= system "adb shell ps | egrep adb | awk '{print $1}' ";

, но когда print " $process \n"; У меня ноль

Любые предложения

Ответы [ 3 ]

1 голос
/ 24 марта 2011

Возвращаемое значение system () - это состояние выхода из программы ( здесь ).Вместо этого используйте операцию backtick:

$process = `...`;
1 голос
/ 24 марта 2011

Я не думаю, что Perl перехватывает вывод, когда вы используете системные вызовы ().

Вместо этого попробуйте заключить его в обратные метки:

my $process = `adb shell ps | egrep adb | awk '{print $1}'`;
0 голосов
/ 24 марта 2011

Я только что нашел гораздо более подробное объяснение самой SO. Редактирование, чтобы добавить эту ссылку - В чем разница между обратными метками Perl, системой и exec?


То, что упомянул pmod, верно. Поскольку в последнее время я немного читал об этом, просто добавляю комментарий с тем, что нашел:

system

выполняет команду, и ваш сценарий perl продолжается после ее завершения. Возвращает статус выхода команды.

backticks - ` `

Это что-то вроде системы, выполняет команду, которую вы запускаете, и ожидает ее возврата. Однако, в отличие от системы, возвращает STDOUT для команды. Я полагаю, что вы ищете здесь.

exec

заменяет текущий процесс новым и ничего не возвращает.

Надеюсь, это поможет ...

...