有没有人知道我们是否可以set +x在没有打印的情况下用bash 说:
set -x
command
set +x
Run Code Online (Sandbox Code Playgroud)
痕迹
+ command
+ set +x
Run Code Online (Sandbox Code Playgroud)
但它应该打印
+ command
Run Code Online (Sandbox Code Playgroud)
Bash是版本4.1.10(4).这对我来说已经有一段时间了 - 输出混乱了无用的set +x线路,使得跟踪设施没有那么有用.
小智 122
我有同样的问题,我能够找到一个不使用子shell的解决方案:
set -x
command
{ set +x; } 2>/dev/null
Run Code Online (Sandbox Code Playgroud)
cho*_*oba 41
您可以使用子shell.退出子shell后,设置x将丢失:
( set -x ; command )
Run Code Online (Sandbox Code Playgroud)
最近,当我对它感到恼火时,我就解决了这个问题:
shopt -s expand_aliases
_xtrace() {
case $1 in
on) set -x ;;
off) set +x ;;
esac
}
alias xtrace='{ _xtrace $(cat); } 2>/dev/null <<<'
Run Code Online (Sandbox Code Playgroud)
这允许您启用和禁用xtrace,如下所示,其中我记录了如何将参数分配给变量:
xtrace on
ARG1=$1
ARG2=$2
xtrace off
Run Code Online (Sandbox Code Playgroud)
你得到的输出看起来像:
$ ./script.sh one two
+ ARG1=one
+ ARG2=two
Run Code Online (Sandbox Code Playgroud)
基于@user108471的简化版本的解决方案怎么样:
shopt -s expand_aliases
alias trace_on='set -x'
alias trace_off='{ set +x; } 2>/dev/null'
trace_on
...stuff...
trace_off
Run Code Online (Sandbox Code Playgroud)