如何获取管道中第一个命令的退出状态? [复制]
Posted
技术标签:
【中文标题】如何获取管道中第一个命令的退出状态? [复制]【英文标题】:how to get the exit status of the first command in a pipe? [duplicate] 【发布时间】:2014-09-04 06:29:03 【问题描述】:我做了一个简单的脚本:
$ more test.bash
#!/bin/bash
echo test
exit 1
当我运行脚本时,退出状态应该是 1
$ /tmp/test.bash
echo $?
1
但是当我按以下方式运行时
/tmp/test.bash | tr -d '\r' 1>>$LOG 2>>$LOG
echo $?
0
退出状态为0,(不是预期的1)
似乎退出状态来自 tr 命令。 但我想要的是从脚本中获取退出状态 - test.bash。
我需要在我的语法中添加/更改什么以便从脚本而不是从管道之后的命令中获得正确的退出状态?
【问题讨论】:
【参考方案1】:使用PIPESTATUS
数组:
$ ls foo | cat
ls: foo: No such file or directory
$ echo $PIPESTATUS[0] $PIPESTATUS[1]
2 0
注意:PIPESTATUS
是一个 bashism(即不是 POSIX)。
【讨论】:
对我来说非常非常好和新! (为你 +1) 很高兴帮助一个人类同胞:-) 投票选出最佳答案 替代方案:您可以通过set -o pipefail
进行初始化来检查所有命令是否以0退出以上是关于如何获取管道中第一个命令的退出状态? [复制]的主要内容,如果未能解决你的问题,请参考以下文章