首页 > 解决方案 > 是否有一种简洁、简洁的方法来推送/弹出 bash 详细和 xtrace 选项的功能?

问题描述

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

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

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

标签: bashfunctionverbose

解决方案


如果您不需要共享外部代码的环境或从outside内部修改变量inside,您可以启动一个子进程( inner )

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

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

您也可以简单地将对内部的调用包装在外部而不修改内部:

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

您可以在此处找到有关子shell 和变量范围的更多信息。 https://www.tldp.org/LDP/abs/html/subshel​​ls.html


推荐阅读