【发布时间】:2010-10-11 15:47:16
【问题描述】:
我有一个运行带有参数的程序的 Bash 脚本。该程序输出一些状态(做这个,做那个......)。该程序没有任何选项可以保持安静。如何防止脚本显示任何内容?
我正在寻找类似 Windows 的 "echo off"。
【问题讨论】:
我有一个运行带有参数的程序的 Bash 脚本。该程序输出一些状态(做这个,做那个......)。该程序没有任何选项可以保持安静。如何防止脚本显示任何内容?
我正在寻找类似 Windows 的 "echo off"。
【问题讨论】:
以下将标准输出发送到空设备(位桶)。
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 中,您不需要使用 nul。
类似
script > /dev/null 2>&1
这将防止标准输出和错误输出,将它们都重定向到/dev/null。
【讨论】:
2>/dev/null
像andynormancx' post 一样,使用这个(如果您在 Unix 环境中工作):
scriptname > /dev/null
或者您可以使用它(如果您在 Windows 环境中工作):
scriptname > nul
【讨论】:
> nul,现在您遇到无法删除的 nul 文件,请尝试 this answer,它就像一个魅力。
这是另一种选择
scriptname |& :
【讨论】:
试试
: $(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 或declare 关键字的赋值被视为一个命令,因此在case 的评估返回码是赋值本身而不是在子shell 中执行的命令:
$ declare DUMMY=$( grep r00t /etc/passwd 2>&1 )
$ echo $?
0
【讨论】:
看看这个来自 The Linux Documentation Project 的例子:
3.6 示例:stderr 和 stdout 2 文件
这会将程序的每个输出都放到一个文件中。如果您希望命令在绝对静默中传递,这有时适用于 cron 条目。
rm -f $(find / -name core) &> /dev/null
也就是说,你可以使用这个简单的重定向:
/path/to/command &>/dev/null
【讨论】:
在您的脚本中,您可以将以下内容添加到您知道将提供输出的行中:
some_code 2>>/dev/null
否则你也可以试试
some_code >>/dev/null
【讨论】:
>>)?