bash - 是否有一种简洁、简洁的方法来推送/弹出 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,但似乎应该有更好的方法?
解决方案
如果您不需要共享外部代码的环境或从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/subshells.html
推荐阅读
- javascript - 如何在跨度中使用输入
- junit5 - 有没有办法让@MethodSource arguments 参数从另一个方法派生
- vue.js - 在 Nuxtjs 中保护 API 密钥
- heroku - 如何将 Heroku Github 部署连接到我正在协作的存储库?
- r - 在 ggplot 中使用构面时指定每行的绘图顺序
- airflow - 在子气流任务中包含/获取父级的日志输出?
- java - 添加时不显示 JButton
- c - 动态分配不在循环中工作
- web-scraping - beautifulsoup4 - 如果 Sibling 存在,则获取 Sibling 元素
- verilog - 具有多个驱动程序的 tri1 的意外行为