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
.
的影响
使用 test1
、test2
和 test3
作为我们的命令:
#!/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
.
我的问题在这里得到了部分回答:
原则上我想在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
.
使用 test1
、test2
和 test3
作为我们的命令:
#!/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
.