天天看點

Shell重定向&>file、2>&1、1>&2的差別

shell上:

0表示标準輸入

1表示标準輸出

2表示标準錯誤輸出

> 預設為标準輸出重定向,與 1> 相同

2>&1 意思是把 标準錯誤輸出 重定向到 标準輸出.

&>file 意思是把 标準輸出 和 标準錯誤輸出 都重定向到檔案file中

用例子說話:

1. grep da * 1>&2 

2. rm -f $(find / -name core) &> /dev/null

上面兩例中的 & 如何了解,&不是放到背景執行嗎?

解釋:

1.&>file或n>&m均是一個獨立的重定向符号,不要分開來了解。

2.明确檔案和檔案描述符的差別。

3.&>file表示重定向标準輸出和錯誤到檔案

例如:

rm -f $(find / -name core) &> /dev/null,/dev/null是一個檔案,這個檔案比較特殊,所有傳給它的東西它都丢棄掉。

4.n>&m表示使檔案描述符n成為輸出檔案描述符m的副本。這樣做的好處是,有的時候你查找檔案的時候很容易産生無用的資訊,如:2> /dev/null的作用就是不顯示标準錯誤輸出;另外當你運作某些指令的時候,出錯資訊也許很重要,便于你檢查是哪出了毛病,如:2>&1

注意,為了友善了解,必須設定一個環境使得執行grep da *指令會有正常輸出和錯誤輸出,然後分别使用下面的指令生成三個檔案:

grep da * > greplog1

grep da * > greplog2 1>&2   

grep da * > greplog3 2>&1  //grep da * 2> greplog4 1>&2 結果一樣

#檢視greplog1會發現裡面隻有正常輸出内容

#檢視greplog2會發現裡面什麼都沒有

#檢視greplog3會發現裡面既有正常輸出内容又有錯誤輸出内容

本文轉自 SoulMio 51CTO部落格,原文連結:http://blog.51cto.com/bovin/1863433,如需轉載請自行聯系原作者