PIPESTATUS
Linux Shell中当使用管道连接各个命令时,若直接读取返回值读取的是管道最右侧命令的返回值,如下
[root@localhost /home/Sudley]#ls|grep aaa |sort
[root@localhost /home/Sudley]#echo "$?"
0
[root@localhost /home/Sudley]#ls |grep aaa
[root@localhost /home/Sudley]#echo "$?"
1
[root@localhost /home/Sudley]#
当前目录没有aaa命名的文件或目录grep aaa命令返回值为1,但是当加了sort命令后再检查"$?“的值发现返回为0,这时就不能满足预期的要求,因为我们检查”$?"时往往需要的是管道中的3个命令都执行成功。这时可以使用PIPESTATUS变量
[root@localhost /home/Sudley]#ls|grep aaa |sort;echo ${PIPESTATUS[0]}
0
[root@localhost /home/Sudley]#ls|grep aaa |sort;echo ${PIPESTATUS[1]}
1
[root@localhost /home/Sudley]#ls|grep aaa |sort;echo ${PIPESTATUS[2]}
0
[root@localhost /home/Sudley]#ls|grep aaa |sort;echo ${PIPESTATUS[3]}
[root@localhost /home/Sudley]#
显然是从0开始的
上面的echo ${PIPESTATUS[2]}和echo $?是等价的。
像这种我们更关心grep是否执行成功时就可以检查${PIPESTATUS[1]},因为在这里sort的返回值都是0