1. 程式人生 > >linux shell 中的 2>&1 用法說明

linux shell 中的 2>&1 用法說明

pass 重定向 分解 說明 分別是 理解 重新 這樣的 通用

linux中有三種標準輸入輸出,分別是 STDIN,STDOUT,STDERR,對應的數字是 0,1,2。

STDIN 是標準輸入,默認從鍵盤讀取信息;
STDOUT 是標準輸出,默認將輸出結果輸出至終端,也就是顯示器之類的東西;
STDERR 是標準的錯誤信息,默認也會顯示在終端上。
由於STDOUT與STDERR都會默認顯示在終端上,為了區分二者的信息,就有了編號的0,1,2的定義,用1表示STDOUT,2表示STDERR。

下面舉例說明:

以普通用戶登陸(Cent OS 7),執行 find /etc -name passwd 命令,默認會將命令的執行結果(STDOUT)與錯誤信息(STDERR)都輸出至終端顯示器。

體驗一下編號 1,2 的作用,find /etc -name passwd 1>find.out 2>find.err ,這裏會將 STDOUT 與 STDERR 分別存放至 find.out 和 find.err 中

個人理解就是 find /etc -name passwd 的命令的執行結果輸出正確的輸出(STDOUT)被1接收,錯誤的信息(STDERR)被2接收。

若要將所有的輸出及錯誤信息都顯示出來,可以用&表示全部1和2的信息,例如:
find /etc -name passwd &>find.all

有時候希望將錯誤的信息重新定向到輸出,就是將2的結果重定向至1中就有了”2>1”這樣的思路,如果按照上面的寫法,系統會默認將錯誤的信息(STDERR)2重定向到一個名字為1的文件中,而非所想的(STDOUT)中。因此需要加&進行區分。就有了 2>&1 這樣的用法:

find /etc -name passwd 2>&1 |less

有時候還能看到這樣的用法:
find /etc -name passwd &2>&1 | less
這裏可以分解成
find /etc -name passwd & 表示前面的命令放到後臺執行。
2>&1 | less 表示將錯誤信息重定向至標準輸出,並用less進行分頁顯示。

linux shell 中的 2>&1 用法說明