我在这里发布了一个问题:为什么 bash errexit 在函数调用中的行为不符合预期
while
答案是因为当子shell、块或命令列表是, until
, ||
, if
, elif
or&&
语句的逻辑谓词的一部分时,bash 不会因错误而退出。
我的下一个问题是:即使调用者正在创建逻辑分叉,如何强制在子shell 或阻塞中强制执行 errexit 选项。例如,组成 a 的命令列表将在第一个失败的命令上停止:
function a() { b ; c ; d ; e ; }
( set -e ; a )
但是,当您从逻辑上对其进行门控时,它不会:
( set -e ; a || false )
无论返回码如何,调用都a
将执行b
,和。即使您像这样明确表示,bash 也会忽略 errexit 谓词:c
d
e
function a() { ( set -e ; b ; c ; d ; e ) ; return $? ; }
( set -e ; a || false )