Bash 如何从$PIPESTATUS中捕获退出代码并使用它退出脚本?
我使用$PIPESTATUS打印每个管道命令的退出代码。我现在知道管道是并行运行的,但是一旦退出代码为0,我如何让脚本退出而不是继续执行下一个命令?谢谢 我不能将set-e放在顶部,因为一旦检测到错误,脚本就会退出,但$PIPESTATUS不会显示,因为echo命令位于管道中任何失败的命令之后Bash 如何从$PIPESTATUS中捕获退出代码并使用它退出脚本?,bash,pipe,Bash,Pipe,我使用$PIPESTATUS打印每个管道命令的退出代码。我现在知道管道是并行运行的,但是一旦退出代码为0,我如何让脚本退出而不是继续执行下一个命令?谢谢 我不能将set-e放在顶部,因为一旦检测到错误,脚本就会退出,但$PIPESTATUS不会显示,因为echo命令位于管道中任何失败的命令之后 set -o pipefail true | false | true || { declare -p PIPESTATUS; exit; } echo "whoops" 输出: declare -a
set -o pipefail
true | false | true || { declare -p PIPESTATUS; exit; }
echo "whoops"
输出:
declare -a PIPESTATUS=([0]="0" [1]="1" [2]="0")
发件人:
pipefail
如果设置,管道的返回值是
以非零状态退出的最后(最右边)命令,如果为零,则为零
管道中的所有命令都成功退出。这个选项是
默认情况下禁用
输出:
declare -a PIPESTATUS=([0]="0" [1]="1" [2]="0")
发件人:
pipefail
如果设置,管道的返回值是
以非零状态退出的最后(最右边)命令,如果为零,则为零
管道中的所有命令都成功退出。这个选项是
默认情况下禁用
你是否在考虑设置-o pipefail可能?因此,当我将set-e放在脚本顶部时,echo“${PIPESTATUS[@]}”不会返回任何值。管道不会从一个命令前进到另一个命令;所有命令都并行运行。@chepner我昨天学的。我不想让它在管道的中央。但是一旦我从整个管道中捕获了退出代码,并且出现了错误,我想退出,而不是转到下一行。如果我将-e设置在顶部,脚本将在显示PIPESTATUS之前退出。您是否考虑
set-o pipefail
可能?因此,当我将set-e设置在脚本顶部时,echo“${PIPESTATUS[@]}”不会返回任何值。管道不会从一个命令前进到另一个命令;所有命令都并行运行。@chepner我昨天学的。我不想让它在管道的中央。但是一旦我从整个管道中捕获了退出代码,并且出现了错误,我想退出,而不是转到下一行。如果我在顶部设置-e,脚本将在显示PIPESTATUS之前退出。