我制作了一个简单的剧本:
$ 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。
我需要添加/更改语法才能从脚本中获取正确的退出状态,而不是从管道后的命令中获取?
答案 0 :(得分:19)
使用PIPESTATUS
数组:
$ ls foo | cat
ls: foo: No such file or directory
$ echo ${PIPESTATUS[0]} ${PIPESTATUS[1]}
2 0
注意:PIPESTATUS
是一种基础(即不是POSIX)。