スクリプトのコマンドラインごとにデバッグ(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_aliases
Bashでは、非対話型シェル(スクリプトなど)でエイリアスを拡張する必要があります。