【发布时间】:2018-08-22 21:59:24
【问题描述】:
我正在使用 $PIPESTATUS 打印每个管道命令的退出代码。我现在知道管道是并行运行的,但是一旦退出代码为 0,我如何让脚本退出而不是继续执行下一个命令?谢谢。
我不能将 set -e 放在顶部,因为一旦检测到错误,脚本就会退出,但 $PIPESTATUS 不会显示,因为 echo 命令位于管道中任何失败的命令之后。
【问题讨论】:
-
你有没有想过
set -o pipefail? -
因此,当我将 set -e 放在脚本顶部时, echo "${PIPESTATUS[@]}" 不会返回任何值。
-
管道不会从一个命令到另一个命令;所有命令并行运行。
-
@chepner 我昨天学到了这一点。我不希望它在管道中间退出。但是,一旦我从整个管道中捕获了退出代码,并且出现错误,我就想退出而不是转到下一行。如果我在顶部设置 -e,脚本会在 PIPESTATUS 显示之前退出。