私はbashスクリプトを持っていますmyscript.sh
、内部にたくさんの関数があります。 1つの関数を実行するには、次のように記述します
source myscript.sh; myfunction
そのような関数をどのようにデバッグしますか?
デバッグするセクションの前にこれらの行を追加するだけです。
set -v -x -e
そしてそれを無効にします。
set +v +x +e
スクリプトでデバッグを有効にし、functrace
を使用して関数のデバッグを出力します。
set -x
set -o functrace
また、Bashでは以下を使用できる必要があります。
$ set -xT
関数トレースを可能にし、
$ set +xT
無効にします。
また、投稿された別の回答を参照して、構文についてスクリプト/シェルコマンドのセットをチェックしない限り、デバッグ(詳細モード)に-vを使用することはお勧めしません。時々役立つもう1つの(一般的な)解決策は、-n
オプションを-x
と組み合わせて使用することです。これにより、実際にコマンドを実行する最後のステップを実行せずにスクリプト/コマンドが「実行」されます。これにより、多くの場合、不要な騒乱を引き起こすことなく、シェル拡張などの難しいエラーを見つけることができます。