如何抑制此Shell命令的输出

4
为什么bash似乎忽略了这个命令行中的重定向操作?我想将标准错误重定向到标准输出,然后将整个内容传送到虚空。
( cd ../src/ && python -m SimpleHTTPServer 8000 2>&1 > /dev/null ) &

我正在运行一个SimpleHTTPServer来托管一些静态网页内容,以便wget可以检查其中的失效链接。然而,我不想看到服务器返回的错误信息(例如请求失败的页面),因为wget日志文件已经提供了我需要的所有信息。

尽管如此,当我运行以下命令时...

( cd ../log/ && wget --quiet --spider --recursive -o spider.log http://localhost:8000/ 2>&1 > /dev/null )

原始的SimpleHTTPServer命令在后台继续输出标准错误报告,例如无法请求资源等。

127.0.0.1 - - [28/May/2013 17:22:31] "GET /technology/actuator.html HTTP/1.1" 200 -
127.0.0.1 - - [28/May/2013 17:22:31] code 404, message File not found
2个回答

7
首先,stdout(1)和stderr(2)都指向您的终端。
然后,您将stderr重定向到stdout指向的位置。(即终端)
之后,您将stdout重定向到/dev/null。但是stderr仍然指向终端。
您也可以使用另一种方式:>/dev/null 2>&1。这样,您首先将stdout重定向到/dev/null,然后将stderr重定向到相同的位置。
Bash提供了一个速记方式:&>/dev/null。

1
也许提供一个示例,展示如何将其应用于任何命令,对于不想阅读完整问题和/或答案,以及不知道完整上下文的人来说会很好。 - matousc

2

使用&>/dev/null来压制所有内容。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接