如何在管道中获取第一个命令的退出状态?

时间:2014-07-14 10:49:24

标签: linux bash shell exit-code

我制作了一个简单的剧本:

$ 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 个答案:

答案 0 :(得分:19)

使用PIPESTATUS数组:

$ ls foo | cat
ls: foo: No such file or directory
$ echo ${PIPESTATUS[0]} ${PIPESTATUS[1]}
2 0

注意:PIPESTATUS是一种基础(即不是POSIX)。