用Bash脚本,我怎么能禁止一个命令的所有输出?

我有一个bash脚本,运行一个带有参数的程序。 该程序输出一些状态(这样做,这样做…)。 这个程序没有select安静。 我怎样才能防止脚本显示任何东西?

我正在寻找像“回声消失”的东西。

以下将标准输出发送到空设备(位桶)。

scriptname >/dev/null 

如果您还想要在那里发送错误消息,请使用其中一个(第一个可能不适用于所有shell):

 scriptname &>/dev/null scriptname >/dev/null 2>&1 scriptname >/dev/null 2>/dev/null 

如果你想logging这些消息但是看不到它们,把/dev/nullreplace成一个实际的文件,比如:

 scriptname &>scriptname.out 

为了完整起见,在Windows cmd.exe(其中“nul”相当于“/ dev / null”)下,是:

 scriptname >nul 2>nul 

就像是

 script > /dev/null 2>&1 

这将防止标准输出错误输出,将它们redirect到/dev/null

尝试

 : $(yourcommand) 

:是“什么也不做”的简称。

$()只是你的命令。

像andynormancx后使用这个:(如果你在Unix环境中工作)

 scriptname > /dev/null 

或者你可以使用这个:(如果你在Windows环境中工作)

 scriptname > nul 

可能适合某些情况的替代方法是将命令的结果分配给variables:

 $ DUMMY=`grep root /etc/passwd` $ echo $? 0 $ DUMMY=`grep r00t /etc/passwd` $ echo $? 1 

由于Bash和其他POSIX命令行解释器不考虑variables赋值作为命令,所以当前命令的返回码是受尊重的。

用Bash脚本,我怎样才能禁止一个命令的所有输出

直言 ,我相信你可以实现简单的使用这个redirect,如在第一个答案中所观察到的,没有别的:

 /path/to/command &>/dev/null 

Linux文档项目中的这个例子也值得一提:

3.6示例:stderr和stdout 2文件

这将把程序的每个输出放到一个文件中。 如果你想让命令通过绝对的沉默,这有时适合cron条目。

  rm -f $(find / -name core) &> /dev/null 

在你的脚本中,你可以将下列内容添加到你知道要输出的行中:

 some_code 2>>/dev/null 

否则,你也可以尝试

 some_code >>/dev/null