(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,但似乎应该有更好的方法?
最佳答案
如果您不需要共享外部代码的环境或修改inside
内outside
的变量,则可以使用(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/