2>&1 的用法說明

  文章來源:http://blog.sina.com.cn/s/blog_5842daa30101enz5.html  html


  常常關注linux腳本的人,必定看到過 2>&1 這樣的用法,最初必定不明白其中的含義以及爲何是這樣的一種組合。昨天偶然間再次看到了這個 2>&1 的寫法,遂下決心搞明白其中的含義。linux

    其實要弄清楚 2>&1 的含義,首先應當知道linux中有三種標準輸入輸出,分別是STDIN,STDOUT,STDERR,對應的數字是0,1,2。STDIN就是標準輸入,默認從鍵盤讀取信息;STDOUT是標準輸出,默認將輸出結果輸出至終端,也就是顯示器之類的東西;STDERR是標準的錯誤信息,默認也會顯示在終端上。因爲STDOUT與STDERR都會默認顯示在終端上,爲了區分兩者的信息,就有了編號的0,1,2的定義,用1表示STDOUT,2表示STDERR。less

    下面舉個例子:以rhce中的例子爲例。ide

    一、在系統中建立一個普通用戶test;htm

    二、以普通用戶登陸,或者以root登陸 su -test 切換至普通用戶test;blog

    三、執行 find /etc -name passwd 命令,默認會將命令的執行結果(STDOUT)與錯誤信息(STDERR)都輸出至終端顯示器。it

    四、體驗一下編號1,2的做用,find /etc -name passwd >find.out 2>find.err,這裏會將STDOUT與STDERR分別存放至find.out和find.err中,該命令也能夠寫成下面三種形式,你們能夠體會一下編號的意義。class

    find /etc -name passwd 1>find.out 2>find.errtest

    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接收。

    五、若要將全部的輸出及錯誤信息都顯示出來,能夠用&表示所有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進行分頁顯示。

相關文章
相關標籤/搜索