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

2>&1 的用法說明

fin 分別是 終端 body 這樣的 舉例 三種 tdi 例如

http://blog.sina.com.cn/s/blog_5842daa30101enz5.html
經常關註linux腳本的人,一定看到過 2>&1 這樣的用法,最初一定不明白其中的含義以及為什麽是這樣的一種組合。昨天偶然間再次看到了這個 2>&1 的寫法,遂下決心搞明白其中的含義。 其實要弄清楚 2>&1 的含義,首先應當知道linux中有三種標準輸入輸出,分別是STDIN,STDOUT,STDERR,對應的數字是0,1,2。STDIN就是標準輸入,默認從鍵盤讀取信息;STDOUT是標準輸出,默認將輸出結果輸出至終端,也就是顯示器之類的東西;STDERR是標準的錯誤信息,默認也會顯示在終端上。由於STDOUT與STDERR都會默認顯示在終端上,為了區分二者的信息,就有了編號的0,1,2的定義,用1表示STDOUT,2表示STDERR。 下面舉個例子:以rhce中的例子為例。 1、在系統中創建一個普通用戶test; 2、以普通用戶登錄,或者以root登錄 su -test 切換至普通用戶test; 3、執行 find /etc -name passwd 命令,默認會將命令的執行結果(STDOUT)與錯誤信息(STDERR)都輸出至終端顯示器。 4、體驗一下編號1,2的作用,find /etc -name passwd >find.out 2>find.err,這裏會將STDOUT與STDERR分別存放至find.out和find.err中,該命令也可以寫成下面三種形式,大家可以體會一下編號的意義。 find /etc -name passwd 1>find.out 2>find.err find /etc -name passwd 2>find.err >find.out find /etc -name passwd 2>find.err 1>find.out 我個人理解就是find /etc -name passwd的命令的執行結果輸出正確的輸出(STDOUT)被1接收,錯誤的信息(STDERR)被2接收。 5、若要將所有的輸出及錯誤信息都顯示出來,可以用&表示全部1和2的信息,例如: find /etc -name passwd &>find.all 6、有時候希望將錯誤的信息重新定向到輸出,就是將2的結果重定向至1中就有了"2>1"這樣的思路,如果按照上面的寫法,系統會默認將錯誤的信息(STDERR)2重定向到一個名字為1的文件中,而非所想的(STDOUT)中。因此需要加&進行區分。就有了 2>&1 這樣的用法,舉例: find /etc -name passwd 2>&1 |less 7、有時候還能看到這樣的用法: find /etc -name passwd &2>&1 |less 這裏可以分解成 find /etc -name passwd & 表示前面的命令放到後臺執行。 2>&1 |less 表示將錯誤信息重定向至標準輸出,並用less進行分頁顯示。

2>&1 的用法說明