スクリプトのインラインデバッグ(xtrace)

スクリプトのインラインデバッグ(xtrace)

スクリプトのコマンドラインごとにデバッグ(xtrace)を強制的に有効または無効にする方法はありますか?

Windowsシェル(「ms-dos」)では、「@」をコマンドラインプレフィックスとして使用できます。エコー(デバッグと仮定)が有効になっている場合(エコーがオンの場合)、行の表示を無効にできます。

(set -x)のxtraceを考えてみましょう。ただし、特定の行への影響を無視して「@」を前に付けることができます。良い:

set -x
@echo Listing...
ls
set +x

出力例:

Listing...
+ ls
file1
file2

シェルスクリプトに似たものはありますか?

答え1

私はそのような演算子があるシェルを知りません。ただし、ほとんどのシェル(kshは例外)では、次のようにxtrace自動的に切り替えることができます。

{
  case $- in
    (*x*) set +x;;
    (*) set -x
  esac
} 2> /dev/null

したがって、別名で作成できます。

alias 'xx={
  case $- in
    (*x*) set +x;;
    (*) set -x
  esac
} 2> /dev/null'

次のように使用されます。

set -x
echo traced
xx; echo not traced; xx
echo traced
set +x

shopt -s expand_aliasesBashでは、非対話型シェル(スクリプトなど)でエイリアスを拡張する必要があります。

関連情報