1. ホーム
  2. linux

[解決済み] bashスクリプトの実行時に行番号を表示させる方法

2022-11-08 14:44:34

質問

多くのコマンドを持ち、多くの出力を生成するテストスクリプトを持っています。 set -x または set -v そして set -e というように、エラー発生時にスクリプトが停止するようにしました。しかし、どの行で実行が停止したかを特定するのが難しく、問題を特定することができません。 各行が実行される前にスクリプトの行番号を出力するような方法はないでしょうか? あるいは、以下のようなコマンドエキシビジョンが生成される前に行番号を出力する方法はないでしょうか。 set -x ? または、私のスクリプトの行位置の問題に対処することができる任意のメソッドは、大きな助けになります。 ありがとうございます。

どのように解決するのですか?

あなたは、すでに -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/debuggingtips は、究極の PS4 で、トレースするのに必要なものすべてを出力します。

export PS4='+(${BASH_SOURCE}:${LINENO}): ${FUNCNAME[0]:+${FUNCNAME[0]}(): }'