我想在某个点之后抑制我的子外壳中的错误。
我编写了脚本来演示这种情况:
worked=false
(echo Starting subshell process \
&& echo If this executes process is considered success \
&& false \
&& echo run if possible, but not an error if failed) \
&& worked=true
echo $worked
我想向外壳报告该过程有效。
我还考虑将工作变量放在子shell中:
&& echo This works process worked: \
&& worked=true \
&& false \
&& echo run if possible, but not an error if failed)
但这也不起作用,因为在子外壳中设置变量不会影响主脚本。
这个怎么样
set -e
一旦发现不受保护的错误,就会终止子shell 。该|| true
构造保护可能失败的语句,您不希望子shell终止。如果您只想知道子shell 是否成功,您可以
$worked
完全省去变量请注意,如果您想
set -e
在命令失败后立即中止子shell 中的执行,则不能使用诸如( set -e; ... ) && worked=true
or之类的构造if ( set -e; ...); then ... fi
。这在手册页中有记录,bash
但我第一次错过了它:您可以将强制命令置于 的条件下
if
,无需将所有内容与&&
链连接:我的解决方案是在子shell 中创建一个变量,并基于此手动控制退出代码: