2011-07-29 5 views
1

완전한 쉘 환경에서 perl 시스템 명령을 실행하려고합니다. shell = True 인 파이썬의 Popen과 비슷합니다. 시도한 시스템 ('/ bin/bash -c "something"')이 작동하지 않습니다. 누군가 펄크가 아닌 사람을 낚아 채!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 
+1

Perl'system'은 둘 이상의 인수로 호출하지 않는 한 이미 쉘을 통해 명령을 실행합니다. [docs] (http://search.cpan.org/perldoc?perlfunc#system)를 읽으십시오. – salva

답변

0

그래서이 나타납니다 당신은 쉘 메타 문자가 알거나 인수가의 형태가 아닌 진정으로 쉘을 호출하지 않습니다를 명령) (시스템을 사용하는 경우 스칼라. 그래서 system ("echo real shell")은 내 경우에는 작동하지만 system ("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

그래서 실행되는 바이너리를 찾을 수 없다는 것이 아닙니다. 문제는 실제 쉘에서 실행되어야하는 프로그램입니다. – CarpeNoctem

0

:

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