在perl中停止unix命令执行的控制台输出

在perl中停止unix命令执行的控制台输出,perl,unix,Perl,Unix,我以perl的形式运行unix命令 $cmd="ls -l"; $result=`$cmd`; print $log_file $result; 但执行的输出也打印在屏幕上。 如何在不在屏幕上打印结果的情况下执行命令?标准输出流不会打印到屏幕上,而是捕获到$result。但是还有第二个输出流,称为标准错误流,程序可以写入该流,默认情况下也会进入屏幕。许多程序使用此流进行日志记录,或者在ls的情况下,使用此流写入错误消息。此外,要捕获此信息,请使用 $cmd = "ls -l 2>&

我以perl的形式运行unix命令

$cmd="ls -l";
$result=`$cmd`;
print $log_file $result;
但执行的输出也打印在屏幕上。
如何在不在屏幕上打印结果的情况下执行命令?

标准输出流不会打印到屏幕上,而是捕获到$result。但是还有第二个输出流,称为标准错误流,程序可以写入该流,默认情况下也会进入屏幕。许多程序使用此流进行日志记录,或者在ls的情况下,使用此流写入错误消息。此外,要捕获此信息,请使用

$cmd = "ls -l 2>&1";
要放弃它,请使用

$cmd = "ls -l 2>/dev/null";

我想这是个错误。在壳中尝试:

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

这不会产生任何输出。

发生这种情况可能是因为$log\u文件以某种方式附加到STDOUT,并复制到它,类似于:

open(my $log_file, ">&STDOUT") 

不,不是。您发布的代码没有显示您赋予它的行为。无法将某些内容同时发送到屏幕和$log_文件。相同-我运行了你的代码,没有任何输出到屏幕。你的意思是,我猜,错误消息仍然会写入屏幕-请澄清你的问题。除了他说的之外。这些消息也不会打印到$log\u文件中。