-1

我在 perl 中运行 unix 命令

$cmd="ls -l";
$result=`$cmd`;
print $log_file $result;

但执行的输出也会打印在屏幕上。如何执行命令而不在屏幕上打印结果?

4

3 回答 3

4

标准输出流不会打印到屏幕上——它被捕获到$result. 但是还有第二个输出流,称为程序可以写入的标准错误流,默认情况下也会显示在屏幕上。许多程序使用此流进行日志记录,或(在 的情况下ls)用于编写错误消息。要另外捕获这一点,请使用

$cmd = "ls -l 2>&1";

要丢弃它,请使用

$cmd = "ls -l 2>/dev/null";
于 2012-10-18T17:16:36.803 回答
0

我认为有一个错误。在 shell 中尝试:

perl -e 'my $x = `ls -l`;'

这不会产生任何输出。

于 2012-10-18T17:16:59.843 回答
0

它发生可能是因为$log_file以某种方式附加到STDOUT,复制到它,例如:

open(my $log_file, ">&STDOUT") 
于 2012-10-18T18:39:58.213 回答