我在 perl 中运行 unix 命令
$cmd="ls -l";
$result=`$cmd`;
print $log_file $result;
但执行的输出也会打印在屏幕上。如何执行命令而不在屏幕上打印结果?
标准输出流不会打印到屏幕上——它被捕获到$result
. 但是还有第二个输出流,称为程序可以写入的标准错误流,默认情况下也会显示在屏幕上。许多程序使用此流进行日志记录,或(在 的情况下ls
)用于编写错误消息。要另外捕获这一点,请使用
$cmd = "ls -l 2>&1";
要丢弃它,请使用
$cmd = "ls -l 2>/dev/null";
我认为有一个错误。在 shell 中尝试:
perl -e 'my $x = `ls -l`;'
这不会产生任何输出。
它发生可能是因为$log_file
以某种方式附加到STDOUT
,复制到它,例如:
open(my $log_file, ">&STDOUT")