用Bash脚本,我怎么能禁止一个命令的所有输出?
我有一个bash脚本,运行一个带有参数的程序。 该程序输出一些状态(这样做,这样做…)。 这个程序没有select安静。 我怎样才能防止脚本显示任何东西?
我正在寻找像“回声消失”的东西。
以下将标准输出发送到空设备(位桶)。
scriptname >/dev/null
如果您还想要在那里发送错误消息,请使用其中一个(第一个可能不适用于所有shell):
scriptname &>/dev/null scriptname >/dev/null 2>&1 scriptname >/dev/null 2>/dev/null
如果你想logging这些消息但是看不到它们,把/dev/null
replace成一个实际的文件,比如:
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