天天看點

關于>/dev/null 2>&1的釋義

一、解釋一

>/dev/null 2>&1 :将标準輸出和錯誤輸出全部重定向到/dev/null中,也就是将産生的所有資訊丢棄。

command > file 2>file 與command > file 2>&1 有什麼不同的地方。

首先 command > file 2>file 的意思是将指令所産生的标準輸出資訊,和錯誤的輸出資訊送到file中。command > file 2>file 這樣的寫法,stdout和stderr都直接送到file中, file會被打開兩次,這樣stdout和stderr會互相覆寫,這樣寫相當于使用了FD1和FD2兩個同時去搶占file 的管道。

而command >file 2>&1 這條指令就将stdout直接送向file, stderr 繼承了FD1管道後,再被送往file,此時,file 隻被打開了一次,也隻使用了一個管道FD1,它包括了stdout和stderr的内容。

從IO效率上,前一條指令的效率要比後面一條的指令效率要低,是以在編寫shell腳本的時候,較多的時候我們會用command > file 2>&1 這樣的寫法.

二、解釋二

關于shell中:>/dev/null 2>&1 詳解

shell中可能經常能看到:>/dev/null 2>&1

指令的結果可以通過%>的形式來定義輸出

分解這個組合:“>/dev/null 2>&1” 為五部分。

1:> 代表重定向到哪裡,例如:echo "123" > /home/123.txt

2:/dev/null 代表空裝置檔案

3:2> 表示stderr标準錯誤

4:& 表示等同于的意思,2>&1,表示2的輸出重定向等同于1

5:1 表示stdout标準輸出,系統預設值是1,是以">/dev/null"等同于 "1>/dev/null"

是以,>/dev/null 2>&1也可以寫成“1> /dev/null 2> &1”

那麼本文标題的語句執行過程為:

1>/dev/null :首先表示标準輸出重定向到空裝置檔案,也就是不輸出任何資訊到終端,說白了就是不顯示任何資訊。

2>&1 :接着,标準錯誤輸出重定向到标準輸出,因為之前标準輸出已經重定向到了空裝置檔案,是以标準錯誤輸出也重定向到空裝置檔案。

原文:

http://blog.sina.com.cn/s/blog_646753190100hwnr.html