1

在 bash 中,我正在尝试制作一个脚本:

echo hi | while read line; do echo $line; done

&

echo $?

将返回 0


假设第一个脚本以某种方式搞砸了:

ech hi | while read line; do echo $line; done

&

echo $?

仍会返回 0

如何返回该错误?

4

1 回答 1

3

Bash 内部变量就是这样做的$PIPESTATUS。它是一个数组,包含最后执行的管道中命令的退出状态。管道中的第一个命令是$PIPESTATUS[0]等:

$ ech hi | while read line; do echo $line; done
-bash: ech: command not found
$ echo ${PIPESTATUS[0]} ${PIPESTATUS[1]}
127 0

$ echo hi | while read line; do ech $line; done
-bash: ech: command not found
$ echo ${PIPESTATUS[0]} ${PIPESTATUS[1]}
0 127

$ echo hi | while read line; do echo $line; done
hi
$ echo ${PIPESTATUS[0]} ${PIPESTATUS[1]}
0 0
于 2014-03-20T16:39:36.843 回答