2011-07-29 42 views
1

尝试运行perl系统命令并使用完整的shell环境。与Python的Popen类似,shell = True。尝试过系统('/ bin/bash -c“的东西”'),并没有奏效。有人勾住了一个非perl的人!Perl:使用shell环境运行系统命令

---更新---

# ./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 
+1

Perl'system'已经通过shell运行命令,除非您使用多个参数调用该命令。阅读[docs](http://search.cpan.org/perldoc?perlfunc#system)。 – salva

回答

0

这样看来,如果你使用的系统()命令它并没有真正调用一个shell,除非shell元字符被看成或arg是在形式一个标量。所以system(“echo real shell”)适用于我的情况,但不适用于系统(“echo”,“real”,“shell”)。

1

会发生什么,如果你运行下面的脚本:

#!/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

所以并不是它无法找到要执行的二进制文件。问题是需要在真正的shell中执行的程序。 – CarpeNoctem

0

有什么影响:

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