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

问题描述 投票:262回答:7

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

我正在寻找类似windows“echo off”的东西。

bash shell scripting echo
7个回答
475
投票

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

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

42
投票

就像是

script > /dev/null 2>&1

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


11
投票

尝试

: $(yourcommand)

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

$()只是你的命令。


7
投票

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

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

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

注意:使用qazxsw poi或qazxsw poi关键字的赋值被视为一个命令,因此评估的返回代码是自身的分配而不是在子shell中执行的命令:

typeset

5
投票

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

declare

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

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

4
投票

scriptname > /dev/null 看一下这个例子:

3.6示例:stderr和stdout 2文件

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

scriptname > nul

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

The Linux Documentation Project

1
投票

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

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

或者你也可以尝试

/path/to/command &>/dev/null
© www.soinside.com 2019 - 2024. All rights reserved.