美文网首页
使用PIPESTATUS获取第一个任务的执行结果

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

作者: 苍蝇的梦 | 来源:发表于2019-11-26 09:56 被阅读0次

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获取第一个任务的执行结果

      本文链接:https://www.haomeiwen.com/subject/vqvolctx.html