2011-07-29 10 views
1

完全なシェル環境でperlシステムコマンドを実行しようとしています。 shell = TrueのPythonのPopenと同様です。試したシステム( '/ bin/bash -c "something"')が動作しませんでした。誰かがperl以外の人を引き付けます!Perl:シェル環境でシステムコマンドを実行

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

あなたがこのプログラムからの出力を含めるようにあなたの質問を編集することができます。

---更新---

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

だから、あなたがシステム()コマンドを使用している場合、シェルのメタ文字が見られない限り、それは本当にシェルを起動しない場合、または引数がの形であることが表示されます:と何が起こる

1

何を使用すると、次のスクリプトを実行するとどうなりますか?

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

実行するバイナリが見つからないというわけではありません。問題は、真のシェルで実行する必要のあるプログラムだということです。 – CarpeNoctem

0

スカラー。システム( "echo real shell")は私の場合は動作しますが、システム( "echo"、 "real"、 "shell")では動作しません。