2011-07-29 90 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: $?";}