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