Bash set + x没有被打印

有没有人知道如果我们可以说在bash中set +x而不打印:

 set -x command set +x 

痕迹

 + command + set +x 

但它应该只是打印

 + command 

Bash是版本4.1.10(4)。 这一直在困扰我一段时间 – 输出混乱无用的set +x线,使跟踪设施没有那么有用。

我有同样的问题,我能find一个不使用子shell的解决scheme:

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

你可以使用一个子shell。 退出子shell后,设置为x将丢失:

 ( set -x ; command ) 

当我对它感到恼火时,我刚刚解决了这个问题:

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

这允许您启用和禁用xtrace,如下所示,在这里logging参数如何分配给variables:

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

你得到的输出如下所示:

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