Shell中 2>/dev/null

1、文件描述符

Linux系統預留可三個文件描述符:0、1和2,他們的意義如下所示:

0——標準輸入(stdin)

1——標準輸出(stdout)

2——標準錯誤(stderr)

標準輸出——stdout

假設:在當前目錄下,有且只有一個文件名稱爲123.txt的文件,這時我們運行這個命令【ls 123.txt】,就會獲得一個標準輸出stdout的輸出結果:123.txt

錯誤輸出——stderr

按照上面的假設,我們運行另一條命令【ls abc.txt】,這樣我們就會獲得一個標準錯誤stderr的輸出結果“ls:無法訪問abc.txt:沒有那個文件或目錄”。

2、重定向

重定向的符號有兩個:>或>>,兩者的區別是:前者會先清空文件,然後再寫入內容,後者會將重定向的內容追加到現有文件的尾部。舉個例子:

(a)重定向標準輸出stdout

如上圖所示,對比沒有添加重定向的操作,這條命令在使用之後並沒有將123.txt打印到屏幕。在緊接的cat操作後,可以發現本來應該被輸出的內容被記錄到stdout.txt中。

(b)重定向標準輸出

(c)可以將stderr單獨定向到一個文件,stdout重定向到另一個文件

cmd 2> stderr.txt 1>stdout.txt

(d)也可以將stderr和stdout重定向到同一個文件

cmd > output.txt 2>&1

或採用下面的方法,可以少寫幾個字,能達到同樣的效果

cmd &> output.txt

cmd >& output.txt     #兩個表達式效果一樣的

3、Linux特殊文件

/dev/null是一個特殊的設備文件,這個文件接收到任何數據都會被丟棄。因此,null這個設備通常也被稱爲位桶(bit bucket)或黑洞。

所以,2>/dev/null的意思就是將標準錯誤stderr刪掉。

原文地址:https://www.zhihu.com/question/53295083

發佈了49 篇原創文章 · 獲贊 9 · 訪問量 9萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章