我有一个Bash脚本,它运行一个带参数的程序。该程序输出一些状态(做这个,做那个...)。没有任何选项让这个程序保持安静。我如何阻止脚本显示任何东西?我正在寻找类似Windows的"echo off"。
jjjwad0x1#
以下代码将标准输出发送到空设备(位存储桶)。
scriptname >/dev/null
如果您还希望错误消息被发送到那里,请使用以下方法之一(第一个方法可能不适用于所有shell):
scriptname &>/dev/null scriptname >/dev/null 2>&1 scriptname >/dev/null 2>/dev/null
而且,如果您想记录消息,但不想看到它们,请将/dev/null替换为实际的文件,例如:
/dev/null
scriptname &>scriptname.out
为完整起见,在Windows cmd.exe下(其中“nul”相当于“/dev/null”),它是:
scriptname >nul 2>nul
6qqygrtg2#
就像
script > /dev/null 2>&1
这将阻止标准输出 * 和 * 错误输出,将它们都重定向到/dev/null。
rn0zuynd3#
在某些情况下,另一种可能适用的方法是将命令的结果赋给变量:
$ DUMMY=$( grep root /etc/passwd 2>&1 ) $ echo $? 0 $ DUMMY=$( grep r00t /etc/passwd 2>&1 ) $ echo $? 1
由于Bash和其他POSIX命令行解释器不将变量赋值视为命令,因此当前命令的返回代码将被考虑。
**注意:**带有typeset或declare关键字的赋值被认为是一个命令,因此case中计算的返回代码是赋值本身,而不是在子shell中执行的命令:
typeset
declare
$ declare DUMMY=$( grep r00t /etc/passwd 2>&1 ) $ echo $? 0
iyfjxgzm4#
试试看
: $(yourcommand)
:是“什么也不做”的缩写。$()只是您的命令。
:
$()
ycggw6v25#
就像andynormancx的文章一样,使用以下代码(如果你在Unix环境中工作):
scriptname > /dev/null
或者,您可以使用以下命令(如果您在Windows环境中工作):
scriptname > nul
d4so4syb6#
这是另一种选择
scriptname |& :
v1l68za47#
请看**The Linux Documentation Project**中的示例:
3.6样品:标准错误和标准输出2文件
这将把程序的每个输出放到一个文件中。如果你想让命令在绝对安静的情况下传递,这有时适合于cron条目。
rm -f $(find / -name core) &> /dev/null
也就是说,您可以使用这个简单的重定向:
/path/to/command &>/dev/null
xytpbqjk8#
在脚本中,您可以将以下内容添加到您知道将给予输出的行中:
some_code 2>>/dev/null
不然你也可以试试
some_code >>/dev/null
rur96b6h9#
>&-关闭文件描述符,甚至不重定向到/dev/nullfoo 2>&- >&-可以关闭标准输入foo 2>&- >&- <&-
>&-
foo 2>&- >&-
foo 2>&- >&- <&-
9条答案
按热度按时间jjjwad0x1#
以下代码将标准输出发送到空设备(位存储桶)。
如果您还希望错误消息被发送到那里,请使用以下方法之一(第一个方法可能不适用于所有shell):
而且,如果您想记录消息,但不想看到它们,请将
/dev/null
替换为实际的文件,例如:为完整起见,在Windows cmd.exe下(其中“nul”相当于“/dev/null”),它是:
6qqygrtg2#
就像
这将阻止标准输出 * 和 * 错误输出,将它们都重定向到
/dev/null
。rn0zuynd3#
在某些情况下,另一种可能适用的方法是将命令的结果赋给变量:
由于Bash和其他POSIX命令行解释器不将变量赋值视为命令,因此当前命令的返回代码将被考虑。
**注意:**带有
typeset
或declare
关键字的赋值被认为是一个命令,因此case中计算的返回代码是赋值本身,而不是在子shell中执行的命令:iyfjxgzm4#
试试看
:
是“什么也不做”的缩写。$()
只是您的命令。ycggw6v25#
就像andynormancx的文章一样,使用以下代码(如果你在Unix环境中工作):
或者,您可以使用以下命令(如果您在Windows环境中工作):
d4so4syb6#
这是另一种选择
v1l68za47#
请看**The Linux Documentation Project**中的示例:
3.6样品:标准错误和标准输出2文件
这将把程序的每个输出放到一个文件中。如果你想让命令在绝对安静的情况下传递,这有时适合于cron条目。
也就是说,您可以使用这个简单的重定向:
xytpbqjk8#
在脚本中,您可以将以下内容添加到您知道将给予输出的行中:
不然你也可以试试
rur96b6h9#
>&-
关闭文件描述符,甚至不重定向到/dev/nullfoo 2>&- >&-
可以关闭标准输入
foo 2>&- >&- <&-