首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何让Bash -x只应用于下一个命令,而不创建子进程,也不调用set +x

如何让Bash -x只应用于下一个命令,而不创建子进程,也不调用set +x
EN

Stack Overflow用户
提问于 2020-12-10 18:39:29
回答 1查看 112关注 0票数 2

这仅限于Bash,答案需要毫无例外地适用于所有Bash版本。

我现在就这么做:

代码语言:javascript
复制
op1
(set -x; op2)
op3

它实现了我的预期:op1不是转录的,op2 转录的,然后op3不是转录的。这具有这样的特性:如果发生“代码楔形”,op2有大量的文本行,我不必记得稍后调用set +x,因为使用括号的作用域。我不希望set +x也被转录,因为它扰乱了输出。

那么,如何在不显式调用set +x的情况下完成上述工作呢?我试过使用花括号,但它们不会像圆括号那样“撤消”set -x

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-12-10 19:00:28

除了在当前的bash4.x中使用了非默认的BASH_XTRACEFD特性之外,以下内容将很好地工作:

代码语言:javascript
复制
logged_cmd() {
  local rc=0
  set -x
  "$@"
  { { rc=$?; set +x; }; } 2>/dev/null
  return "$rc"
}

op1
logged_cmd op2
op3

添加对正在使用BASH_XTRACEFD的情况的支持(使set -x日志转到stderr以外的其他地方)将需要使用bash 4.1+特性,这在问题中已被明确禁止。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65240414

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档