Почему системная команда Perl выдает синтаксическую ошибку? - PullRequest
1 голос
/ 23 сентября 2010

Сценарий Perl, содержащий команду Unix для grep сетевых адаптеров Ethernet, не может быть выполнен внутри сценария! Я пробовал "qx", $ var и "system", но, похоже, это не работает!

Коды:

#!/usr/bin/perl

use warnings;
use strict;
use Term::ANSIColor;

print "\nYou are now in Showing Ethernet Cards!\n\n";

print "**************************\n";
print "|Ethernet Cards Available|\n";
print "**************************\n";

print "\nThe Ethernet Cards that are available are: "; 
my $ex = system ('ifconfig | awk '{print $1}' | egrep "eth|lo"');
print "$ex";

При выполнении ошибки "синтаксическая ошибка в строке ./ethercards.pl 14, рядом с" 'ifconfig | awk '{" Выполнение ./ethercards.pl прервано из-за ошибок компиляции. "Появляется в терминале.

У кого-нибудь есть мысли по этому поводу? Спасибо!

Ответы [ 3 ]

4 голосов
/ 23 сентября 2010

Вы используете ' в качестве разделителя строк, но ' также отображается в строке.

Затем вы ошибочно возвращаете значение system в качестве выводакоманда.Когда команда не делает то, что вы ожидаете, прочитайте ее документы.

Вы также выполняете слишком много работы в командной строке.Вы уже находитесь в Perl, поэтому избегайте создания дополнительных процессов, когда вам не нужно:

my @interfaces = `/sbin/ifconfig` =~ m/^(\w+):/gm;

print "interfaces are @interfaces\n";

Если вам нужны только некоторые интерфейсы, добавьте туда grep:

my @interfaces = grep { /^(?:eth|lo)/ } `/sbin/ifconfig` =~ m/^(\w+):/gm;

print "interfaces are @interfaces\n";

Мне нравится использовать полный путь к исполняемым файлам, чтобы я знал, какой из них я получаю.:)

4 голосов
/ 23 сентября 2010

Подсветка синтаксиса также предполагает, что ваша системная строка повреждена. Попробуйте

system ('ifconfig | awk \'{print $1}\' | egrep "eth|lo"');
0 голосов
/ 23 сентября 2010

Если вам нужен вывод вашей программы, напишите:

my $ex = qx!ifconfig | awk '{print \$1}' | egrep "eth|lo"!;
print "$ex";
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...