Bash 在它被管道传输到while之后,如何返回错误级别($?)?

Bash 在它被管道传输到while之后,如何返回错误级别($?)?,bash,while-loop,errorlevel,Bash,While Loop,Errorlevel,在bash中,我试图制作一个脚本,该脚本如下所示: echo hi | while read line; do echo $line; done & 将返回0 假设第一个脚本不知怎么搞砸了: ech hi | while read line; do echo $line; done & 仍将返回0 如何返回该错误?Bash内部变量$PIPESTATUS执行此操作。它是一个数组,包含最后执行的管道中命令的退出状态。管道中的第一个命令是$PIPESTATUS[0],等等: $ ech hi |

在bash中,我试图制作一个脚本,该脚本如下所示:

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

将返回0


假设第一个脚本不知怎么搞砸了:

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

仍将返回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

谢谢你,伙计。我是说。更新了更多的信息/准确度。如果这已经足够了,请考虑接受我的回答。
echo $?
$ 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