理解命令輸出重定向

2021-08-25 17:53:59 字數 1302 閱讀 9105

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 :接著,標準錯誤輸出重定向 到 標準輸出,因為之前標準輸出已經重定向到了空裝置檔案,所以標準錯誤輸出也重定向到空裝置檔案。

最常用的方式有:

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 這樣的寫法。

ls -l > out.file 2>&1 &

解釋:ls -l > out.file //將ls的輸出重定向到檔案out.file

2>&1 //在shell中,檔案描述符通常是:stdin,stdout,stderr,即:0,1,2,由此可以看出,它將ls -l > out.file在輸出過程中產生的錯誤資訊也放在了stdout,即:1中,你可以作實驗,如果命令產生了錯誤,那麼錯誤資訊也就在out.file 中.

最後的& ,不用說,是放在後台執行.

輸入重定向,正確輸出重定向,錯誤輸出重定向

一 標準輸入 stdin a.輸入重定向 標準輸入 作用 將原先鍵盤輸入的內容改由檔案內容代替 root wenwen cat test.txt asdas asdas asdas 按crtl d 退出 將network內容匯入到test.txt中去 root wenwen cat test.txt...

Linux重定向(輸入輸出重定向)

我們知道,linux 中標準的輸入裝置預設指的是鍵盤,標準的輸出裝置預設指的是顯示器。而本節所要介紹的輸入 輸出重定向,完全可以從字面意思去理解,也就是 通常是用檔案或命令的執行結果來代替鍵盤作為新的輸入裝置,而新的輸出裝置通常指的就是檔案。對於輸入重定向來說,其需要用到的符號以及作用如表 1 所示...

重定向Trace輸出

把以下 copy到工程中的任何乙個cpp檔案中,則trace輸出的資訊會在任何notepad檔案中輸出。class cmfxtrace extern cmfxtrace thetracer class cmfxtrace public cfile private constructor public...