112

set +x印刷せずにbashで言えるかどうかは誰にもわかりません:

set -x
command
set +x

痕跡

+ command
+ set +x

しかし、それはただ印刷する必要があります

+ command

Bash はバージョン 4.1.10(4) です。これはしばらくの間私を悩ませています - 出力は役に立たないset +x行で雑然としていて、トレース機能はそれほど役に立ちません.

4

6 に答える 6

173

私は同じ問題を抱えていましたが、サブシェルを使用しない解決策を見つけることができました:

set -x
command
{ set +x; } 2>/dev/null
于 2013-10-07T13:21:30.140 に答える
50

サブシェルを使用できます。サブシェルを終了すると、設定xは失われます。

( set -x ; command )
于 2012-11-02T12:56:29.510 に答える
8

つい最近、これに悩まされたときに、これに対する解決策をハックしました。

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
于 2014-07-01T18:32:39.717 に答える
8

@ user108471 の簡略化されたバージョンに基づくソリューションはどうですか:

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

trace_on
...stuff...
trace_off
于 2018-07-26T23:11:00.843 に答える