Perl: запустить системную команду с оболочкой - PullRequest
1 голос
/ 29 июля 2011

Попытка запустить системную команду perl в полноценной оболочке. Похож на Python's Popen с shell = True. Попробовал систему ('/ bin / bash -c "что-то"'), и это не сработало. Кто-то подцепит не-Perl парня!

--- обновление ---

# ./test.pl 
ENV-PATH: /usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin
sys-PATH: /usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin

Ответы [ 3 ]

1 голос
/ 29 июля 2011

Что произойдет, если вы запустите следующий скрипт:

#!/usr/bin/perl                                                                                                                                                                                                                            

use strict;
use warnings;

my $path = $ENV{'PATH'};
print "ENV-PATH: ";
print $path;
print "\n";

print "sys-PATH: ";
system("echo \$PATH") == 0 or die;
print "\n";

Можете ли вы отредактировать свой вопрос, чтобы включить вывод этой программы?

0 голосов
/ 30 июля 2011

Таким образом, похоже, что если вы используете команду system (), она не вызовет оболочку, если только метасимвол оболочки не виден ИЛИ аргумент не имеет форму скаляра. Таким образом, система («echo real shell») работает в моем случае, но не система («echo», «real», «shell»).

0 голосов
/ 29 июля 2011

Что происходит с:

my $rc = system "/bin/bash", "-c", "shell command to run with arguments";
if ($rc != 0) {print "command failed: $?";}
...