击集+ X未经打印它(Bash set +x without it being printed)

2019-07-03 12:44发布

有谁知道,如果我们可以说set +x在bash未经打印它:

set -x
command
set +x

痕迹

+ command
+ set +x

但它应该只是打印

+ command

击是4.1.10版(4)。 这是窃听我有一段时间了-输出堆满了无用的set +x线,使得跟踪工具,因为它可能是不一样有用。

Answer 1:

我有同样的问题,我能找到不使用子shell的解决方案:

set -x
command
{ set +x; } 2>/dev/null


Answer 2:

您可以使用一个子shell。 在退出子shell中,设置x将会丢失:

( set -x ; command )


Answer 3:

我只是最近设计了一个简单的解决这个当我成为恼火吧:

shopt -s expand_aliases
_xtrace() {
    case $1 in
        on) set -x ;;
        off) set +x ;;
    esac
}
alias xtrace='{ _xtrace $(cat); } 2>/dev/null <<<'

这使您可以启用和禁用X跟踪在下面,在那里我记录的参数如何分配给变量:

xtrace on
ARG1=$1
ARG2=$2
xtrace off

你会得到如下所示的输出:

$ ./script.sh one two
+ ARG1=one
+ ARG2=two


Answer 4:

如何根据@ user108471的一个简化版本的解决方案:

shopt -s expand_aliases
alias trace_on='set -x'
alias trace_off='{ set +x; } 2>/dev/null'

trace_on
...stuff...
trace_off


文章来源: Bash set +x without it being printed
标签: bash shell