1. 程式人生 > >shell獲取標準錯誤

shell獲取標準錯誤

shell命令有標準輸出、標準錯誤。通常執行命令都只拿到標準輸出,對於標準錯誤則拿不到,但是在console上執行可能會顯示。如:

fping -c 10 -p 100 10.0.0.11

console會得到以下輸出:


10.0.0.11 : [0], 84 bytes, 100 ms (100 avg, 50% loss)
10.0.0.11 : [1], 84 bytes, 100 ms (100 avg, 33% loss)
10.0.0.11 : [2], 84 bytes, 100 ms (100 avg, 25% loss)
10.0.0.11 : [3], 84 bytes, 107 ms (102 avg, 20% loss)
10.0.0.11 : [4], 84 bytes, 108 ms (103 avg, 16% loss)
10.0.0.11 : [5], 84 bytes, 100 ms (102 avg, 14% loss)
10.0.0.11 : [6], 84 bytes, 100 ms (102 avg, 12% loss)
10.0.0.11 : [7], 84 bytes, 100 ms (102 avg, 11% loss)
10.0.0.11 : [8], 84 bytes, 100 ms (102 avg, 10% loss)
10.0.0.11 : [9], 84 bytes, 100 ms (101 avg, 0% loss)

10.0.0.11 : xmt/rcv/%loss = 10/10/0%, min/avg/max = 100/101/108

 

其中第一部分是標準輸出,但是第二部分確是通過標準錯誤得出的統計資訊。

 

如果我們想得到統計資訊,通過 fping -c 10 -p 100 10.0.0.11 | tail -n 1 得出的確是

10.0.0.11 : xmt/rcv/%loss = 10/10/0%, min/avg/max = 100/101/108
10.0.0.11 : [9], 84 bytes, 100 ms (101 avg, 0% loss)

兩條結果。

 

所以如果我們想得到統計資訊,則需將標準錯誤重定向到標準輸出,即可用以下命令:

fping -c 10 -p 100 10.0.0.11 2>&1 | tail -n 1

 

/dev/null 代表空裝置檔案
> 代表重定向到哪裡,例如:echo "123" > /home/123.txt
1 表示stdout標準輸出,系統預設值是1,所以">/dev/null"等同於"1>/dev/null"
2 表示stderr標準錯誤
& 表示等同於的意思,2>&1,表示2的輸出重定向等同於1