有没有一种简洁明了的方法来 push/pop bash verbose 和 xtrace 选项的功能?
is there a clean, concise way to push/pop bash verbose and xtrace options for a funtion?
(Linux bash 4.1.2)
我有一个 bash 函数调用另一个函数。低级函数想要设置 -xv 进行调试,但我不希望它弄乱父函数中 x 和 v 的值。 IE。我希望子函数按下 -xv,然后在 return 上恢复之前的设置。例如:
function outer(){ echo starting; inner; echo done; }
function inner(){
set -xv
echo inside
set +xv
}
outer
如果 outer 中的设置为默认设置,则此方法有效;否则它会在外部代码的其余部分强制 +xv 。我可以想象一些非常混乱的脚本来解析 BASHOPTS,但似乎应该有更好的方法?
如果您不需要共享外部代码的环境或修改 outside
中的变量 inside
,您可以使用 ( inner )
启动子进程
function outer(){ echo starting; inner; echo done; }
function inner(){
(
set -xv
echo inside
)
}
outer
请注意,由于您是在子 shell 中执行的,因此不需要取消设置 x 和 v。
你也可以在不修改 inner 的情况下简单地将对 inner 的调用包装在 outer 中:
function outer(){ echo starting; ( inner ); echo done; }
您可以在此处找到有关子外壳和变量作用域的更多信息。
https://www.tldp.org/LDP/abs/html/subshells.html
local save=$-; set -x
...
set +x -$save
(Linux bash 4.1.2) 我有一个 bash 函数调用另一个函数。低级函数想要设置 -xv 进行调试,但我不希望它弄乱父函数中 x 和 v 的值。 IE。我希望子函数按下 -xv,然后在 return 上恢复之前的设置。例如:
function outer(){ echo starting; inner; echo done; }
function inner(){
set -xv
echo inside
set +xv
}
outer
如果 outer 中的设置为默认设置,则此方法有效;否则它会在外部代码的其余部分强制 +xv 。我可以想象一些非常混乱的脚本来解析 BASHOPTS,但似乎应该有更好的方法?
如果您不需要共享外部代码的环境或修改 outside
中的变量 inside
,您可以使用 ( inner )
function outer(){ echo starting; inner; echo done; }
function inner(){
(
set -xv
echo inside
)
}
outer
请注意,由于您是在子 shell 中执行的,因此不需要取消设置 x 和 v。
你也可以在不修改 inner 的情况下简单地将对 inner 的调用包装在 outer 中:
function outer(){ echo starting; ( inner ); echo done; }
您可以在此处找到有关子外壳和变量作用域的更多信息。 https://www.tldp.org/LDP/abs/html/subshells.html
local save=$-; set -x ... set +x -$save