perlでunixコマンドを実行しています
$cmd="ls -l";
$result=`$cmd`;
print $log_file $result;
ただし、実行からの出力も画面に出力されます。画面に結果を出力せずにコマンドを実行する方法は?
標準出力ストリームは画面に出力されません-にキャプチャされ$result
ます。ただし、プログラムが書き込むことができる標準エラーストリームと呼ばれる2番目の出力ストリームがあり、これもデフォルトで画面に表示されます。多くのプログラムは、このストリームをログに記録するため、または(の場合ls
)エラーメッセージを書き込むために使用します。これをさらにキャプチャするには、
$cmd = "ls -l 2>&1";
代わりに破棄するには、
$cmd = "ls -l 2>/dev/null";
間違いがあると思います。シェルでそれを試してください:
perl -e 'my $x = `ls -l`;'
それは出力を生成しません。
おそらく、$log_file
何らかの形で に接続されSTDOUT
、複製されているために発生します。次のようなものです。
open(my $log_file, ">&STDOUT")