我有一个Bash脚本,运行带有参数的程序。该程序输出一些状态(做这个,做那个…)这个程序没有任何安静的选项。如何防止脚本显示任何内容?

我正在寻找类似Windows的“回音关闭”。


当前回答

就像andynormancx的帖子一样,使用这个(如果你在Unix环境中工作):

scriptname > /dev/null

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

scriptname > nul

其他回答

在某些情况下,另一种适合的方法是将命令的结果赋值给变量:

$ DUMMY=$( grep root /etc/passwd 2>&1 )
$ echo $?
0
$ DUMMY=$( grep r00t /etc/passwd 2>&1 )
$ echo $?
1

由于Bash和其他POSIX命令行解释器不将变量赋值视为命令,因此当前命令的返回代码是受尊重的。

注意:带有typeset或declare关键字的赋值被认为是一个命令,因此case的计算返回代码是赋值本身,而不是在子shell中执行的命令:

$ declare DUMMY=$( grep r00t /etc/passwd 2>&1 )
$ echo $?
0

看看这个来自Linux文档项目的例子:

3.6示例:stderr和stdout2文件 这将把程序的每个输出都放到一个文件中。如果您希望以绝对静默的方式传递命令,有时这适用于cron条目。 Rm -f $(find / name core) &> /dev/null

也就是说,你可以使用这个简单的重定向:

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

Try

: $(yourcommand)

:是do nothing的缩写。

$()只是您的命令。

这是另一种选择

scriptname |& :

就像andynormancx的帖子一样,使用这个(如果你在Unix环境中工作):

scriptname > /dev/null

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

scriptname > nul