342

我有一个运行带有参数的程序的 Bash 脚本。该程序输出一些状态(做这个,做那个......)。该程序没有任何选项可以保持安静。如何防止脚本显示任何内容?

我正在寻找类似 Windows 的"echo off"的东西。

4

8 回答 8

602

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

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
于 2009-03-05T23:39:17.587 回答
50

就像是

script > /dev/null 2>&1

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

于 2009-03-05T23:41:10.313 回答
17

尝试

: $(yourcommand)

:是“什么都不做”的缩写。

$()只是你的命令。

于 2015-09-23T01:48:22.973 回答
17

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

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

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

注意:带有typesetordeclare关键字的赋值被认为是一个命令,因此在 case 中评估的返回码是赋值本身,而不是在子 shell 中执行的命令:

$ declare DUMMY=$( grep r00t /etc/passwd 2>&1 )
$ echo $?
0
于 2016-03-18T01:00:28.417 回答
8

andynormancx' post一样,使用它(如果您在 Unix 环境中工作):

scriptname > /dev/null

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

scriptname > nul
于 2009-03-05T23:44:57.513 回答
4

看看Linux 文档项目中的这个例子:

3.6 示例:stderr 和 stdout 2 文件

这会将程序的每个输出放置到文件中。如果您希望命令以绝对静默方式传递,这有时适用于 cron 条目。

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

也就是说,您可以使用这个简单的重定向:

/path/to/command &>/dev/null
于 2017-05-09T21:51:46.837 回答
3

这是另一种选择

scriptname |& :
于 2013-02-12T20:50:26.520 回答
0

在您的脚本中,您可以将以下内容添加到您知道将提供输出的行中:

some_code 2>>/dev/null

否则你也可以试试

some_code >>/dev/null
于 2017-06-17T12:09:00.763 回答