相关疑难解决方法(0)

"set -e"如何与子壳一起使用?

我想知道是否set -e通过子壳传播(即子壳继承-e其父级的设置),所以我做了一些实验.我发现了一些我无法解释的奇怪结果.

首先,这是一些基本测试.他们回归了我的期望.

( true; false )         # 1
( false; true )         # 0
( set -e; false; true ) # 1
Run Code Online (Sandbox Code Playgroud)

现在我尝试了如果我在子shell中放置一个子shell会发生什么.此表达式返回1,表示它传播.

( set -e; ( false; true ) )
Run Code Online (Sandbox Code Playgroud)

然后我尝试了这些表达式.我希望他们返回1,但我发现他们返回0.

( set -e; ( true; false ); true )
( set -e; ( set -e; false; true ); true )
Run Code Online (Sandbox Code Playgroud)

为什么?在这两种情况下,内部子shell返回1,无论是否set -e传播(我在开头检查).外部子shell具有set -e,这意味着它应该在内部子shell退出后失败,但事实并非如此.有人可以解释一下吗?

error-handling bash return-code

14
推荐指数
1
解决办法
2857
查看次数

标签 统计

bash ×1

error-handling ×1

return-code ×1