shell指令碼中/dev/null 2>&1詳解

兵工廠三劍客發表於2018-06-07

轉載自:指令碼中/dev/null 2>&1的解釋

1,可以將/dev/null看作"黑洞". 它非常等價於一個只寫檔案. 所有寫入它的內容都會永遠丟失. 而嘗試從它那兒讀取內容則什麼也讀不到. 然而, /dev/null對命令列和指令碼都非常的有用.

首先shell中0代表標準輸入 ;1代表標準輸出;2代表標準錯誤輸出


用處:

禁止標準輸出.    1 cat $filename >/dev/null   # 檔案內容丟失,而不會輸出到標準輸出. 

禁止標準錯誤.    2>/dev/null 這樣錯誤資訊[標準錯誤]就被丟掉了. 


2, 1>/dev/null 2>&1的含義 

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

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

分二步解析:第一步 1>/dev/null 的意思就是禁止標準輸出,系統預設就是1標準輸出,所以可以這樣寫>/dev/null ;

                     第二步 2>&1 的意思就是把標準錯誤輸出重定向到標準輸出,由於禁止了標準輸出,所以也就不會輸出標準錯誤輸出。

那麼/dev/null 2>&1語句含義: 
1>/dev/null 首先表示標準輸出重定向到空裝置檔案,也就是不輸出任何資訊到終端,說白了就是不顯示任何資訊。 
2>&1 接著,標準錯誤輸出重定向等同於 標準輸出,因為之前標準輸出已經重定向到了空裝置檔案,所以標準錯誤輸出也重定向到空裝置檔案。


command > file 2>file語義;

command > filecommand表示把標準輸出傳送到file中

2>file 表示把標準錯誤輸出也傳送給file

這樣就出現了file檔案通過管道訪問了2次,存在io效率

 從IO效率上,command > file 2>file的效率要比/dev/null 2>&1的命令效率要低,所以在編寫shell指令碼的時候,較多的時候我們會用command > file 2>&1 這樣的寫法

相關文章