15

シェルスクリプトの実行中に、実行中の行番号を知る方法は、 shell スクリプトからシェルスクリプトを実行し、実行中の行番号を知ることができるラッパーを作成する必要があります。

4

3 に答える 3

21

出力に行番号を含めるようにPS4変数を設定できます。set -x

PS4=':${LINENO}+'
set -x

これにより、実行時に各行の前に行番号が付けられます。

:4+command here
:5+other command

+の変数展開の後に、いくつかのシジル文字 (私の例では a など) を持つことが重要PS4です。最後の文字は、ネストの深さを示すために繰り返されるためです。つまり、関数を呼び出し、その関数がコマンドを呼び出すと、からの出力は次のset -xように報告されます。

:3+++command run within a function called from a function
:8++command run within a function
:19+line after the function was called

スクリプトの実行に複数のファイルが関与している場合は、BASH_SOURCE変数のみを含めるのではなく、含めることをお勧めしますLINENO(これが本当に bash スクリプトであると仮定すると、スクリプトが!/bin/shで始まることを確認してください)。#!/bin/bash

PS4=':${BASH_SOURCE}:${LINENO}+'
set -x
于 2012-05-30T11:22:15.400 に答える
6

Bashには、必要な$LINENOことを行う特別な変数があります。

#!/bin/bash
echo "$LINENO"
echo "$LINENO"
echo "$LINENO"

デモ:

$ ./lineno
2
3
4
于 2012-05-30T11:17:13.110 に答える
5
#!/bin/sh -x

実行された行を報告します(-x明確にするためのオプション)。行番号は表示されませんが、実際の行が報告されます。

別の、しかしより面倒なアプローチは、ここに記載されているように、トラップ ハンドラーを使用することです。

于 2012-05-30T09:51:46.473 に答える