我有一个Bash脚本,该脚本运行带有参数的程序。该程序输出一些状态(执行此操作,执行此操作...)。这个程序没有任何选择可以安静。如何防止脚本显示任何内容?
我正在寻找Windows的“ echo off”之类的东西。
我有一个Bash脚本,该脚本运行带有参数的程序。该程序输出一些状态(执行此操作,执行此操作...)。这个程序没有任何选择可以安静。如何防止脚本显示任何内容?
我正在寻找Windows的“ echo off”之类的东西。
Answers:
以下命令将标准输出发送到空设备(位存储桶)。
scriptname >/dev/null
而且,如果您还希望将错误消息发送到那里,请使用以下命令之一(第一个消息可能不适用于所有shell):
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
echo foo > $(tty)
脚本并运行./test.sh &> /dev/null
-输出仍会打印到终端。当然,如果您正在编写不使用此类命令的脚本,这不是问题。
/dev/null
Cygwin中存在@yang ,您无需使用nul
。
就像是
script > /dev/null 2>&1
这将阻止标准输出和错误输出,并将它们都重定向到/dev/null
。
2>/dev/null
尝试
: $(yourcommand)
:
是“什么都不做”的缩写。
$()
只是您的命令。
0
(成功)。让我们看一个使用命令的示例,该命令false
始终返回1
(失败)。例如( echo foo | tee file ; false ) && echo bar
显示foo
。使用技巧来抑制输出:( : $(echo foo | tee file ; false) ) && echo bar
。但是它显示的bar
含义是返回状态代码0
(这不是的返回状态代码false
)。请提供此限制以更新您的答案。干杯
DUMMY=$(yourcommand)
呢?它没有您提到的限制。:)
DUMMY=$( echo foo | tee file ; false ) && echo bar
不显示任何内容。然后DUMMY=$( echo foo | tee file ; true ) && echo bar
显示命令bar
。让我知道您是否提供支持的答案;-)干杯
在某些情况下可能适用的替代方法是将命令的结果分配给变量:
$ DUMMY=$( grep root /etc/passwd 2>&1 )
$ echo $?
0
$ DUMMY=$( grep r00t /etc/passwd 2>&1 )
$ echo $?
1
由于Bash和其他POSIX命令行解释器不将变量分配视为命令,因此应遵守当前命令的返回码。
注意:使用typeset
or declare
关键字进行分配被视为命令,因此,如果返回值是分配本身而不是在子外壳程序中执行的命令,则返回的评估代码是:
$ declare DUMMY=$( grep r00t /etc/passwd 2>&1 )
$ echo $?
0
就像andynormancx的post一样,使用以下命令(如果您在Unix环境中工作):
scriptname > /dev/null
或者,您可以使用它(如果您在Windows环境中工作):
scriptname > nul
在脚本中,您可以将以下内容添加到要提供输出的行中:
some_code 2>>/dev/null
否则你也可以尝试
some_code >>/dev/null
>>
)?