将命令的输出重定向到 /dev/null

将命令的输出重定向到 /dev/null

我从 bash 脚本运行以下行,以便在远程计算机上运行脚本 /usr/run.pl

  xargs -P "$numprocs" -I '{}' -n  1 -- perl -e 'alarm shift; exec @ARGV' -- "$timeout" ssh -nxaq -o ConnectTimeout=5 -o StrictHostKeyChecking=no '{}' /usr/run.sh < <(echo -e "$node") 

但我在控制台上得到以下标准输出

Connection to 143.6.22.4 closed by remote host.
 xargs: perl: exited with status 255; aborting

我需要把1>/dev/空在我的语法中避免出现此消息?

答案1

进程通常有两个输出流发送到终端:标准输出(绑定到文件描述符 1)和标准错误(绑定到文件描述符 2)。这允许轻松地分离捕获预期输出和通常不希望输出的错误消息或其他诊断信息。

当您使用重定向 ( >) 时,只会将标准输出踢到指定的文件或位置,而不会影响标准错误。这使您可以查看是否存在错误(就像您所看到的那样)。

如果要发送所有输出,包括标准错误,则需要重定向两个流:

/path/to/program arg1 arg2 > /dev/null 2>&1

或者,更明确地说:

/path/to/program arg1 arg2 > /dev/null 2> /dev/null

该语法2>&1的意思是“将当前发送到文件描述符 2 的输出发送到发送到文件描述符 1 的输出将要发送到的位置”。 >省略了 FD1 的默认值,因此它在语义上与 相同1>,这可能2>更有意义。

答案2

如果您不想显示 bash 的控制台/终端日志,请使用以下命令,例如我启动 php 服务器,该服务器生成我不想要的请求/响应日志,我使用以下命令执行此操作:

php -S localhost:8989 &> /dev/null

相关内容