Bash 嵌套子外壳短路和set-e
我没有遵循最后一种情况,为什么外部(关于最内部的子shell)Bash 嵌套子外壳短路和set-e,bash,Bash,我没有遵循最后一种情况,为什么外部(关于最内部的子shell)&禁用最内部的设置-e选项?前面的案例显示,在没有&& 除此之外还有其他解决办法吗 a) $> ( echo 0 ; ( echo 1 ; false ; echo 2 ) ; echo 3 ) 0 1 2 3 b) $> ( echo 0 ; ( set -e ; echo 1 ; false ; echo 2 ) ; echo 3 ) 0 1 3 c) $> ( set -e ; echo 0 ; ( ech
&
禁用最内部的设置-e
选项?前面的案例显示,在没有&&
除此之外还有其他解决办法吗
a) $> ( echo 0 ; ( echo 1 ; false ; echo 2 ) ; echo 3 )
0
1
2
3
b) $> ( echo 0 ; ( set -e ; echo 1 ; false ; echo 2 ) ; echo 3 )
0
1
3
c) $> ( set -e ; echo 0 ; ( echo 1 ; false ; echo 2 ) ; echo 3 )
0
1
d) $> ( set -e ; echo 0 ; ( set -e ; echo 1 ; false ; echo 2 ) ; echo 3 )
0
1
e) $> ( set -e ; echo 0 ; ( set -e ; echo 1 ; false ; echo 2 ) && echo ok ; echo 3 )
0
1
2
ok
3
让我们不要在一个陌生的地方闲逛。你到底想完成什么?解决方法是不要期望
set-e
会以你想要的方式运行,而是自己进行错误检查。我认为这里的原因是你的内部set-e
是多余的;子shell继承单个全局设置,因此在父shell中禁用它的任何东西(这里是&&&
,per)也会在子shell中禁用它。但是在任何情况下,请参见。我们不要陷入一个错误。你到底想完成什么?解决方法是不要期望set-e
会以你想要的方式运行,而是自己进行错误检查。我认为这里的原因是你的内部set-e
是多余的;子shell继承单个全局设置,因此在父shell中禁用它的任何内容(此处为&&
,per)也会在子shell中禁用它。但在任何情况下,请参阅。
$ ( set -e ; echo 0 ; ( { echo 1 && false && echo 2 ; } && echo ok ) || exit 1 ; echo 3 )
0
1