Bash 运行 多个命令,直到一个在捕获最后退出代码时失败

Bash running multiple commands, until one fails while capturing last exit code

我的问题在这里得到了部分回答:

原则上我想在bash实现如下:

// assume both functions return truthy values and the 2nd doesn't run if 1st fails

$success = test1() && test2();

someOtherStuff();

exit($success);

GitLab CI scripts terminate immediately when any simple command fails (possibly due to set -e,肯定是 IDK)。

最近的(并考虑 link):

CODE=0
if test1 && test2; then
    CODE=1
fi

someOtherStuff

exit $CODE

有没有更好的方法?特别是,我想得到真正的 $CODE 而不是假的。

据我了解,您问的是如何 运行 执行一系列命令直到一个命令失败,并存储失败命令的退出状态以供将来参考,以一种可靠的方式set -e.

的影响

使用 test1test2test3 作为我们的命令:

#!/usr/bin/env bash

test1() { return 0; }
test2() { return 2; }
test3() { echo "THIS SHOULD NOT BE RUN"; }
someOtherStuff() { echo "This should be run; current value of retval is $retval"; }

retval=0
test1 && test2 && test3 || retval=$?
someOtherStuff ||: "ignoring a failure here"
exit "$retval"

|| retval=$? 使 test1 && test2 && test3 成为 已检查的表达式 ,因此不受 set -e.

的影响

:true 的同义词,具有作为占位符的常规使用历史。


运行 以上,我们有如下输出:

This should be run; current value of retval is 2

...脚本的退出状态确实是 2.