如何捕获$ PIPESTATUS的退出代码并使用它退出脚本?

时间:2018-08-22 21:59:24

标签: bash pipe

我正在使用$ PIPESTATUS打印每个管道命令的退出代码。我现在知道管道是并行运行的,但是一旦退出代码为<> 0,如何使脚本退出而不是继续执行下一个命令?谢谢。

我不能将set -e放在顶部,因为一旦检测到错误,脚本就会退出,但是不会显示$ PIPESTATUS,因为该echo命令位于管道中任何失败的命令之后。

1 个答案:

答案 0 :(得分:3)

set -o pipefail

true | false | true || { declare -p PIPESTATUS; exit; }
echo "whoops"

输出:

declare -a PIPESTATUS=([0]="0" [1]="1" [2]="0")

来自Bash Reference Manual

  

pipefail

     

如果设置,则管道的返回值是   最后一个(最右边)命令以非零状态退出,如果为零,则退出   管道中的所有命令均成功退出。这个选项是   默认情况下处于禁用状态。