在 bash 中,我正在尝试制作一个脚本:
echo hi | while read line; do echo $line; done
&
echo $?
将返回 0
假设第一个脚本以某种方式搞砸了:
ech hi | while read line; do echo $line; done
&
echo $?
仍会返回 0
如何返回该错误?
在 bash 中,我正在尝试制作一个脚本:
echo hi | while read line; do echo $line; done
&
echo $?
将返回 0
假设第一个脚本以某种方式搞砸了:
ech hi | while read line; do echo $line; done
&
echo $?
仍会返回 0
如何返回该错误?
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