多数のコマンドがあり、多数の出力を生成するテスト スクリプトがあります。set -x
または およびset -v
を使用してset -e
、エラーが発生するとスクリプトが停止します。ただし、問題を特定するために実行が停止した行を特定するのはまだかなり困難です。各行が実行される前にスクリプトの行番号を出力する方法はありますか? または によって生成されたコマンド表示の前に行番号を出力する方法はありますかset -x
? または、スクリプトの行の場所の問題に対処できる方法があれば、非常に助かります。よろしくお願いします。
ベストアンサー1
すでに を使用しているとのことです-x
。 変数は、オプションが設定されているPS4
場合にコマンド ラインがエコーされる前に印刷されたプロンプトの値が であることを示し-x
、デフォルトでは に:
続いてスペースが続きます。
(現在実行中のスクリプトまたはシェル関数の行番号) をPS4
出力するように変更できます。LINENO
たとえば、スクリプトが次のように記述されている場合:
$ cat script
foo=10
echo ${foo}
echo $((2 + 2))
このように実行すると、行番号が出力されます。
$ PS4='Line ${LINENO}: ' bash -x script
Line 1: foo=10
Line 2: echo 10
10
Line 3: echo 4
4
http://wiki.bash-hackers.org/scripting/デバッグのヒント(代わりの:ウェブアーカイブリンクPS4
) は、トレースに必要になる可能性のあるすべてのものを出力する最終的な結果を提供します。
export PS4='+(${BASH_SOURCE}:${LINENO}): ${FUNCNAME[0]:+${FUNCNAME[0]}(): }'