set +x
印刷せずにbashで言えるかどうかは誰にもわかりません:
set -x
command
set +x
痕跡
+ command
+ set +x
しかし、それはただ印刷する必要があります
+ command
Bash はバージョン 4.1.10(4) です。これはしばらくの間私を悩ませています - 出力は役に立たないset +x
行で雑然としていて、トレース機能はそれほど役に立ちません.
私は同じ問題を抱えていましたが、サブシェルを使用しない解決策を見つけることができました:
set -x
command
{ set +x; } 2>/dev/null
サブシェルを使用できます。サブシェルを終了すると、設定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 を有効または無効にすることができます。ここでは、引数が変数にどのように割り当てられているかをログに記録しています。
xtrace on
ARG1=$1
ARG2=$2
xtrace off
そして、次のような出力が得られます。
$ ./script.sh one two
+ ARG1=one
+ ARG2=two
@ user108471 の簡略化されたバージョンに基づくソリューションはどうですか:
shopt -s expand_aliases
alias trace_on='set -x'
alias trace_off='{ set +x; } 2>/dev/null'
trace_on
...stuff...
trace_off