web-dev-qa-db-ja.com

bash関数をデバッグ/トレースする方法は?

私はbashスクリプトを持っていますmyscript.sh、内部にたくさんの関数があります。 1つの関数を実行するには、次のように記述します

source myscript.sh; myfunction

そのような関数をどのようにデバッグしますか?

2
Dims

デバッグするセクションの前にこれらの行を追加するだけです。

set -v -x -e

そしてそれを無効にします。

set +v +x +e

1
asktyagi

スクリプトでデバッグを有効にし、functraceを使用して関数のデバッグを出力します。

set -x
set -o functrace
0
αғsнιη

また、Bashでは以下を使用できる必要があります。

$ set -xT

関数トレースを可能にし、

$ set +xT

無効にします。

また、投稿された別の回答を参照して、構文についてスクリプト/シェルコマンドのセットをチェックしない限り、デバッグ(詳細モード)に-vを使用することはお勧めしません。時々役立つもう1つの(一般的な)解決策は、-nオプションを-xと組み合わせて使用​​することです。これにより、実際にコマンドを実行する最後のステップを実行せずにスクリプト/コマンドが「実行」されます。これにより、多くの場合、不要な騒乱を引き起こすことなく、シェル拡張などの難しいエラーを見つけることができます。

0
PJF