当前位置:  开发笔记 > 编程语言 > 正文

如何使用Bash抑制命令的所有输出?

如何解决《如何使用Bash抑制命令的所有输出?》经验,为你挑选了5个好方法。

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

我正在寻找类似windows"echo off"的东西.



1> andynormancx..:

以下命令将标准输出发送到空设备(位桶).

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


注意'&>'是bash特有的(也许是C shell); Korn和Bourne shell需要2>/dev/null或2>&1(将stderr发送到与stdout相同的位置).Korn shell似乎将'&>'解释为"在后台运行东西,然后在空命令上执行i/o重定向".
请注意,某些命令直接写入终端设备而不是标准输出/错误.要测试,在脚本中放入`echo foo> $(tty)`并运行`./test.sh&>/dev/null` - 输出仍然打印到终端.当然,如果您编写的脚本不使用此类命令,则这不是问题.

2> Diego Sevill..:

就像是

script > /dev/null 2>&1

这将阻止标准输出错误输出,将它们重定向到/dev/null.


如果你想节省一些打字,也只需&>即可实现;)

3> 小智..:

尝试

: $(yourcommand)

: 是"什么都不做"的缩写.

$() 只是你的命令.


@semente Perfect:命令`DUMMY = $(echo foo | tee file; false)&& echo bar`不显示任何内容.命令`DUMMY = $(echo foo | tee file; true)&& echo bar`显示`bar`.让我知道你是否提供了支持它的答案;-)干杯
非常有趣,但有一个限制:返回的状态代码始终为"0"(成功).让我们看一个使用命令`false`的例子,它总是返回"1"(失败).例如`(echo foo | tee file; false)&& echo bar`显示`foo`.使用你的技巧来抑制输出:`(:$(echo foo | tee file; false))&& echo bar`.但是它显示"bar"表示返回状态代码为"0"(这不是从"false"返回的状态代码).请更新您提供此限制的答案.干杯
@olibre,那么`DUMMY = $(你的命令)`?它没有你提到的限制.:)

4> semente..:

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

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

由于Bash和其他POSIX命令行解释器不将变量赋值视为命令,因此遵循当前命令的返回码.

注意:使用typesetor declare关键字的分配被认为是一个命令,因此评估的返回代码是自己的分配,而不是在子shell中执行的命令:

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



5> Lucas Gabrie..:

像andynormancx一样使用这个:(如果你在Unix环境下工作)

scriptname > /dev/null

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

scriptname > nul

推荐阅读
LEEstarmmmmm
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有