使用PIPESTATUS获取第一个任务的执行结果

2019-07-23 遇到的一点小问题
在类Unix操作系统(以及一些其他借用了这个设计的操作系统,如Windows)中,管道(英语:Pipeline)是一系列将标准输入输出链接起来的进程,其中每一个进程的输出被直接作为下一个进程的输入。 每一个链接都由匿名管道实现[来源请求]。管道中的组成元素也被称作过滤程序。

Pipeline (Unix)
###测试文件 wannoo.sh
echo -e "qwertyuiop\nasdfghjkl\nzxcvbnm"
exit 1
###测试
sh /mnt/wannoo.sh
echo $?
sh /mnt/wannoo.sh | grep "asd"
echo $?
w=$(sh /mnt/wannoo.sh)
w_r=$?
echo "${w}" | grep "asd"
echo ${w_r}
###输出及结果
qwertyuiop
asdfghjkl
zxcvbnm
1
asdfghjkl
0
asdfghjkl
1

在shell开发中使用echo $?去接收执行结果,但是使用管道只能获取最后一个任务的结果。之前为了获取第一个任务的执行结果都得分开处理,很麻烦。
咨询同事,推荐了个链接:Pipe output and capture exit status in Bash,使用PIPESTATUS获取。
简单试了下,可以了。
记录一下。

###新的方法
sh /mnt/wannoo.sh | grep "asd" ; test ${PIPESTATUS[0]} -eq 0
echo $?
###输出及结果
asdfghjkl
1

你可能感兴趣的:(使用PIPESTATUS获取第一个任务的执行结果)