bash - 有没有一种干净、简洁的方法来推送/弹出函数的 bash 详细和 xtrace 选项?

标签 bash function verbose

(Linux bash 4.1.2) 我有一个 bash 函数调用另一个函数。低级函数希望设置 -xv 进行调试,但我不希望它与父函数中 x 和 v 的值混淆。 IE。我希望子函数推送 -xv,然后在返回时恢复之前的设置。例如:

function outer(){ echo starting; inner; echo done; }
function inner(){
    set -xv
    echo inside
    set +xv
  }
outer

如果外部设置为默认值,则此方法有效;否则它会在外部代码的其余部分中强制+xv。我可以想象一些非常困惑的脚本来解析 BASHOPTS,但似乎应该有更好的方法?

最佳答案

如果您不需要共享外部代码的环境或修改insideoutside的变量,则可以使用(inner)

function outer(){ echo starting; inner; echo done; }
function inner(){
    (
        set -xv
        echo inside
    )
}
outer

请注意,由于您是在子 shell 中执行,因此无需取消设置 x 和 v。

您也可以简单地将对inner的调用包装在outer中,而不修改inner:

function outer(){ echo starting; ( inner ); echo done; }

您可以在此处找到有关子 shell 和变量作用域的更多信息。 https://www.tldp.org/LDP/abs/html/subshells.html

关于bash - 有没有一种干净、简洁的方法来推送/弹出函数的 bash 详细和 xtrace 选项?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55480492/

相关文章:

macos - 在 BASH 中,如何对数组中的现有元素使用 plist 上的默认写入?

javascript - Angular/Socket.io/HTML/从 HTML 中的 <script> 内调用 Controller 的函数

ruby-on-rails - WEBrick Rails 服务器冗长

Powershell在全局范围内应用详细信息

python - 从远程机器上的 docker 容器上执行命令

bash - 在 ~/.bash_profile 删除后检索加载的 bash 配置文件

bash - 处理除第一个参数之外的所有参数(在 bash 脚本中)

function - 在定义之前在 Swift 中声明一个函数

java - 避免多个函数调用?

python - Pycharm 以详细模式运行单元测试