我有一个Bash脚本,运行带有参数的程序。该程序输出一些状态(做这个,做那个…)这个程序没有任何安静的选项。如何防止脚本显示任何内容?
我正在寻找类似Windows的“回声”。
下面将标准输出发送到空设备(位桶)。
scriptname >/dev/null
如果你也想在那里发送错误消息,使用其中之一(第一个可能在所有shell中都不起作用):
scriptname &>/dev/null scriptname >/dev/null 2>&1 scriptname >/dev/null 2>/dev/null
并且,如果你想记录消息,但不看到它们,用一个实际的文件替换/dev/null,例如:
/dev/null
scriptname &>scriptname.out
为了完整起见,在Windows cmd.exe(其中“nul”相当于“/dev/null”)下,它是:
scriptname >nul 2>nul
类似的
script > /dev/null 2>&1
这将防止标准输出而且错误输出,将它们都重定向到/dev/null。
像andynormancx英文报一样,使用这个(如果你在Unix环境中工作):
scriptname > /dev/null
或者你可以使用这个(如果你在Windows环境中工作):
scriptname > nul
这是另一种选择
scriptname |& :
试一试
: $(yourcommand)
:是“do nothing”的缩写。
:
$()只是你的命令。
$()
在某些情况下,另一种适合的方法是将命令的结果赋值给变量:
$ DUMMY=$( grep root /etc/passwd 2>&1 ) $ echo $? 0 $ DUMMY=$( grep r00t /etc/passwd 2>&1 ) $ echo $? 1
由于Bash和其他POSIX命令行解释器不将变量赋值视为命令,因此当前命令的返回代码是受尊重的。
带有typeset或declare关键字的注意:赋值被认为是一个命令,因此在case中计算的返回码是赋值本身,而不是在子shell中执行的命令:
typeset
declare
$ declare DUMMY=$( grep r00t /etc/passwd 2>&1 ) $ echo $? 0
看看这个来自 Linux文档项目的例子:
3.6示例:stderr和stdout2文件 这将把程序的每个输出都放到一个文件中。如果您希望以绝对静默的方式传递命令,有时这适用于cron条目。 rm -f $(find / -name core) &> /dev/null
3.6示例:stderr和stdout2文件
这将把程序的每个输出都放到一个文件中。如果您希望以绝对静默的方式传递命令,有时这适用于cron条目。
rm -f $(find / -name core) &> /dev/null
也就是说,你可以使用这个简单的重定向:
/path/to/command &>/dev/null
在你的脚本中,你可以将以下内容添加到你知道要输出的行中:
some_code 2>>/dev/null
或者你也可以试试
some_code >>/dev/null