2010-11-30 5 views
1

Быстрый вопрос,Perl - команда Pipe в другую

Есть ли способ передать команду в другую команду через perl, как вы можете, в командной строке * Nix?

Например:
free -m | grep Mem

Как я смог бы сделать "трубы" в Perl?

ответ

6

Вы можете вызвать команду именно так:

system("free -m | grep Mem"); 

От documentation:

Если есть только один скалярный аргумент, аргумент проверяется на наличие метасимволов, и если есть любой, весь аргумент передается в командную оболочку системы для синтаксического анализа (это/bin/sh -c на платформах Unix, но зависит от других платформ). Если в аргументе нет метасимволов оболочки, он разбивается на слова и передается непосредственно в execvp, что является более эффективным.

Вы можете сделать то же самое с другими методами для вызова внешних команд, как open:

open my $fh, "-|", "free -m | grep Mem" or croak "failed to run pipeline"; 
# and now read from $fh as usual 
+3

Лучше использовать три аргумента открытым: `открыть свой $ Ф.Х.,«- |»,«бесплатно -m | grep Mem "или croak" Не удалось запустить конвейер ";`? – 2010-11-30 21:56:07

Смежные вопросы