web-dev-qa-db-ja.com

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

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

Windowsシェル( "ms-dos")には "@"があり、コマンドラインの前に付けることができます。エコー(デバッグと言いましょう)が有効(エコーオン)の場合、その行を無効にして表示できます。

Xtrace on(set -x)を検討しますが、 "@"で始まるようにプレフィックスを付けるいくつかの行でその効果を省略できます。次のように:

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

出力例:

Listing...
+ ls
file1
file2

シェルスクリプトで似ているものはありますか?

5
Luciano

私はそのような演算子を持つシェルを知りません。ただし、ほとんどのシェル(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

Bashでは、shopt -s expand_aliases(スクリプトのように)非対話型シェルでエイリアスを展開します。

9