2013-05-28 30 views
3

爲什麼此命令行中的重定向操作顯然被bash忽略?我的目標是將標準錯誤重定向到標準輸出,然後將全部輸入到空白處。如何從此Shell命令中抑制輸出

(cd ../src/ && python -m SimpleHTTPServer 8000 2>&1 > /dev/null) & 

我在一些靜態web內容上運行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 

回答

4

首先stdout(1)和stderr(2)指向您的終端。

然後,您將stderr重定向到stdout指向的任何地方。 (這是終端。)

然後,您將stdout重定向到/dev/null。但是stderr仍然指向終端。

你可以這樣做:>/dev/null 2>&1:這種方式你首先將stdout重定向到/dev/null,然後stderr到相同的。

Bash爲此提供了速記&>/dev/null

0

使用&>/dev/null來壓制一切。