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

问题描述:

我有一个bash脚本,它运行带有参数的程序。该程序输出一些状态(这样做,这样做...)。这个程序没有选择安静。我如何防止脚本显示任何内容?使用Bash脚本,我怎样才能禁止一个命令的所有输出?

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

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

,如果你也想的错误消息被派往那里,使用的(首先可能并不适用于所有壳工作)之一:

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

,如果你要录制的消息,但是看不到他们,用实际文件替换/dev/null,如:

scriptname &>scriptname.out 

为完整的Windows的cmd.exe(其中 “NUL” 是 “的/ dev/null的” 等效)下,它是:

scriptname >nul 2>nul 
+8

注'&>'是bash(也许是C shell)特有的; Korn和Bourne shell需要2>/dev/null或2>&1(将stderr发送到与stdout相同的地方)。 Korn shell似乎将'&>'解释为“运行到&后台,然后在空命令上执行I/O重定向”。 – 2009-03-06 00:16:03

+2

请注意,有些命令直接写入终端设备,而不是标准输出/错误。为了测试,将`echo foo> $(tty)`放在脚本中并运行`./test.sh&>/dev/null` - 输出仍然会打印到终端。当然,如果你正在编写一个不使用这种命令的脚本,这并不是问题。 – l0b0 2013-02-13 12:19:07

+1

太棒了! > nul 2> nul适用于Windows下的cygwin! – yang 2014-01-12 08:05:57

喜欢的东西

script > /dev/null 2>&1 

这将阻止标准输出错误输出,他们两个重定向到/dev/null

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

scriptname > /dev/null 

,或者您可以使用此:(如果你在Windows环境中工作)

scriptname > nul 

尝试

: $(yourcommand) 

:是短期的 “什么都不做”。

$()只是你的命令。

,可能适合在某些情况下的替代方法是一个命令的结果分配给一个变量:

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

由于击等POSIX命令行解释器不考虑变量赋值作为一个命令,本命令的返回码受到尊重。

使用Bash脚本,我怎样才能抑制命令的所有输出?


恕我直言,我相信你可以使用这个重定向实现简单,因为在第一个答案观察,没有别的:

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


The Linux Documentation Project这个例子是值得一提的还有:

3.6示例:stderr和stdout 2文件

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

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

在你的脚本,你可以添加以下到您所知道的去给一个输出线:

some_code 2>>/dev/null 

要不然你也可以尝试

some_code >>/dev/null