如何在Linux中隐藏Shell应用程序的输出?


Answers:


68

您可以重定向任何程序的输出,使其不会被看到。

$ program > /dev/null

这将重定向标准输出-您仍然会看到任何错误

$ program &> /dev/null

这将重定向所有输出,包括错误。


第一个不适用于wget
Jader Dias

这是因为wget将stderr用于其某些输出。第二个应该工作。
theotherre

2
顺便说一句,您可能希望将该wget输出保存到日志文件,因此当/如果您的下载停止工作,则可以找出原因。如果仍然在脚本中。如果这是一个一次性的类型来看,则是啊,到垃圾桶
西蒙斯

1
因为wget您可以使用-q选项使其安静。
pkhamre 2012年

有什么办法抑制直接写到/ dev / tty的输出?
d11wtq 2014年

30

命令行上有三个可用的IO设备。

 standard in - 0 
 standard out - 1 
 standard error - 2 

要将标准输出(默认输出)重定向到文件(并覆盖文件),请使用

 command > file.log 

要附加到file.log,请使用2> s

 command >> file.log

要将标准错误重定向到file.log,请使用

 command 2> file.log

并追加

 command 2>> file.log

将输出合并为一个流并将其全部发送到一个位置

 command > file.log 2>&1 

这会将2(stderr)发送到1(stdout),并将stdout发送到file.log

注意,也可以将standard重定向到需要stdin的命令中

 command << file.txt 

编辑
有关更多详细信息,请查看《高级Bash脚本指南》


有人可以解释其command > file.log 2>&1工作原理吗?
科里·克莱恩

您想知道多低的水平?
马特·西蒙斯

3
@nomoreink:实际上是两个命令,一个是> file,第二个是2>&1。第一个将标准重定向到文件。第二个使用第二个文件描述符,并将其重定向到第一个。您可以执行相反的操作,使用将标准输出重定向到标准错误>&2,然后使用将标准错误重定向到文件2> file
休伯特·卡里奥

12

隐藏 stdout

./command >/dev/null

隐藏stdoutstderr

./command >/dev/null 2>&1

隐藏stdoutstderr释放终端(在后台运行命令)

./command >/dev/null 2>&1 &

3

如果只想隐藏输出(而不是将其保存到文件中),则可以使用:

编辑:

$命令&> / dev / null


这会将输出重定向到一个名为null的文件
theotherreceive

它生成了一个空文件
Jader Dias

1
您不会想要/ dev / null,对吗?
巴布(Babu)

1
是的,我会的,巴布。我的意思是$命令&> / dev / null。我为自己的打字速度太快而道歉。
卢乔(Lacho),2009年

2

对于Mac OS X(10.6“雪豹”):

如果需要通过检查输出/错误文件描述符来隐藏输出而不让程序知道它,则可以尝试在shell中使用以下命令:

stty flusho; command ;stty -flusho

或者,如果您只想通过这种方式隐藏来自终端的输入:

stty  -echo; command ;stty  echo

有关更多信息,请参见stty(1)手册页

对于Linux,我只知道Ubunutu(10.04“清醒”)和一些“ Debian / Arch”(在下面评论-tnx hendry)没有flusho设置(我在手册页中看不到其他合适的设置) 。该echo设置仍然可以在Ubuntu上使用。


我在Debian / Arch下的默认样式没有这些选项。
亨德里

我当然应该提到我什至不在OP的操作系统上。编辑了我的帖子。
维克
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.