相关疑难解决方法(0)

在bash中使用set -e/set + e和函数

我一直在我的脚本中使用这样的简单bash前导码:

#!/bin/bash
set -e
Run Code Online (Sandbox Code Playgroud)

与模块化/使用功能相结合,这使我今天感到困惑.

所以,说我有一个像某个地方的功能

foo() {
  #edit: some error happens that make me want to exit the function and signal that to the caller 
  return 2
}
Run Code Online (Sandbox Code Playgroud)

理想情况下,我希望能够使用多个小文件,将其功能包含在其他文件中,然后调用这些函数

set +e
foo
rc=$?
set -e
Run Code Online (Sandbox Code Playgroud)

.这适用于两层例程.但是如果foo也调用这样的子程序,返回前的最后一个设置将是set -e,这将使脚本在返回时退出 - 我无法在调用函数中覆盖它.所以,我必须做的是

foo() {
  #calling bar() in a shielded way like above
  #..      

  set +e
  return 2
}
Run Code Online (Sandbox Code Playgroud)

我发现它非常违反直觉(也不是我想要的 - 如果在某些情况下我想使用该函数而不屏蔽失败,而在其他情况下我想要处理清理?)什么是处理这个问题的最佳方法?顺便说一句.我在OSX上这样做,我还没有测试过Linux上的这种行为是否有所不同.

bash shell

12
推荐指数
1
解决办法
2万
查看次数

标签 统计

bash ×1

shell ×1