linux /dev/null 2>&1

/dev/null :代表空設備文件
 :代表重定向到哪裏,例如:echo "123" > /home/123.txt
 :表示stdout標準輸出,系統默認值是1,所以">/dev/null"等同於"1>/dev/null"
 :表示stderr標準錯誤
 :表示等同於的意思,2>&1,表示2的輸出重定向等同於1

1 > /dev/null 2>&1 語句含義:
1 > /dev/null : 首先表示標準輸出重定向到空設備文件,也就是不輸出任何信息到終端,說白了就是不顯示任何信息。
2>&1 :接着,標準錯誤輸出重定向(等同於)標準輸出,因爲之前標準輸出已經重定向到了空設備文件,所以標準錯誤輸出也重定向到空設備文件。


實例解析:

cmd >a 2>a 和 cmd >a 2>&1 爲什麼不同?
cmd >a 2>a :stdout和stderr都直接送往文件 a ,a文件會被打開兩遍,由此導致stdout和stderr互相覆蓋。
cmd >a 2>&1 :stdout直接送往文件a ,stderr是繼承了FD1的管道之後,再被送往文件a 。a文件只被打開一遍,就是FD1將其打開。

兩者的不同點在於:

cmd >a 2>a 相當於使用了FD1、FD2兩個互相競爭使用文件 a 的管道;
cmd >a 2>&1 只使用了一個管道FD1,但已經包括了stdout和stderr。
從IO效率上來講,cmd >a 2>&1的效率更高。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章