天天看點

echo hello 1>&2 |grep aaa echo hello 2>&1 |grep aaa

下面兩條指令分别會有怎樣的輸出

echo  hello 1>&2 |grep aaa

echo  hello 2>&1 |grep aaa

答:第一個輸出hello,第二個無輸出,解析如下

1>&2  将正确輸出重定向到标準錯誤2通道

2>&1  将錯誤輸出重定向到标準輸出1通道

echo  hello 1>&2 後面跟了一個 | grep aaa

| 是管道,意思就是将第一條指令的結果放到第二條指令中,管道指令右邊隻處理左邊的标準正确輸出,也就是通道1

echo  hello    1>&2   将結果輸出到錯誤2通道,也就是在終端螢幕上顯示hello,而标準輸出1通道沒有值,| grep aaa 搜素左邊傳來的标準輸出通道1的結果,發現沒有aaa,是以沒有輸出,最終螢幕隻顯示一個hello

echo  hello    2>&1   将錯誤傳回值輸出到标準1通道,不過該語句正确,沒有錯誤,通道2也就為空,螢幕沒有顯示,| grep aaa 搜素左邊傳來的标準輸出通道1的結果,通道1有hello 但是沒有 aaa  是以沒有輸出,是以螢幕沒有顯示

再幫大家加深一下,如果換一下,改成 echo  hello    1>&2 | grep  e  和 echo  hello    2>&1 | grep  e  呢?

echo  hello    1>&2   将正确結果hello輸出到錯誤2通道,也就是在終端螢幕上顯示hello,而标準輸出1通道沒有值,| grep aaa 搜素左邊傳來的标準輸出通道1的結果,發現沒有hello,是以沒有輸出,最終螢幕隻顯示一個hello

echo  hello    2>&1   将錯誤傳回值輸出到标準1通道,不過該語句正确,沒有錯誤,通道2也就為空,螢幕沒有顯示,| grep aaa 搜素左邊傳來的标準輸出通道1的結果,發現有e,是以輸出hello

通道2會在螢幕上顯示,通道1不會在螢幕上顯示,記住這句話,這句話是針對管道的第一個指令,大家别誤解了,把管道指令左邊指令的通道1的值給右邊指令,右邊指令再輸出,如果正确,輸出通道1,錯誤,輸出通道2

這就是我對重定向  ,1>&2 , 2>&1 的了解,有什麼不對的大家也可以提出來一起讨論

---------------------------------------------------------------------------------------------------------------------------------

shell上:

0表示标準輸入

1表示标準輸出

2表示标準錯誤輸出

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

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

有以下兩種簡寫方式

&>log
>&log
           

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

C.為什麼2>&1要放在後面

考慮如下一條shell指令

nohup java -jar app.jar >log 2>&1 &

1

(最後一個&表示把條指令放到背景執行,不是本文重點,不懂的可以自行Google)

為什麼2>&1一定要寫到>log後面,才表示标準錯誤輸出和标準輸出都定向到log中?

幾個基本符号及其含義:

/dev/null 表示空裝置檔案

0 表示stdin标準輸入

1 表示stdout标準輸出

2 表示stderr标準錯誤

& 表示等同于的意思,2>&1,表示2的輸出重定向等同于1

從command>/dev/null說起1

其實這條指令是一個縮寫版,對于一個重定向指令,肯定是command > a這種形式,它預設等于command 1>a,即将标準輸出結果重定向到檔案a中。是以command > /dev/null相當于執行了command 1 > /dev/null。執行command産生了标準輸出stdout(用1表示),重定向到/dev/null的裝置檔案中。

說說2>&1

通過上面command > /dev/null等價于command 1 > /dev/null,那麼對于2>&1也就好了解了,2就是标準錯誤,1是标準輸出,那麼這條指令不就是相當于把标準錯誤重定向到标準輸出麼。但是是&1而不是1,這裡&是什麼?這裡&相當于等效于标準輸出。

2>&1,意思是錯誤輸出等同于标準輸出。是以使得./test.sh >test.log,可以把标準輸出和錯誤輸出全部導入日志test.log裡。

注意:2>&1,中間不能有空格。

注意:2>&1,必須寫在最後,否則會失去原有意義。

————————————————

繼續閱讀