set -e
最初のエラーでスクリプトの実行を停止するために使用しています。
問題は、これでは何が悪かったのかがわからないことです。
失敗した最後のコマンドが表示されるようにbashスクリプトを更新するにはどうすればよいですか?
set -e
最初のエラーでスクリプトの実行を停止するために使用しています。
問題は、これでは何が悪かったのかがわからないことです。
失敗した最後のコマンドが表示されるようにbashスクリプトを更新するにはどうすればよいですか?
の代わりにset -e
、ERR トラップを使用します。$BASH_LINENO
エラーが発生した特定の行番号を取得するために渡すことができます。https://stackoverflow.com/a/185900/14122の回答で、これを利用したスクリプトを提供します。
要約する:
error() {
local sourcefile=$1
local lineno=$2
# ...logic for reporting an error at line $lineno
# of file $sourcefile goes here...
}
trap 'error "${BASH_SOURCE}" "${LINENO}"' ERR
で試しました--verbose
か?
bash --verbose script.sh
set -e
エラーが発生するとすぐに処理が停止するため、単独では使用できません。デバッグに使用できる -x および -v オプションの詳細については、Bash リファレンス マニュアルのSet Builtin セクションを参照してください。
何かのようなもの:
set -e
set -v
エラーが発生すると終了し、読み取られた各入力行が表示されます。ただし、エラーのある行だけが表示されるわけではありません。そのためには、独自の明示的なエラー チェックを行う必要があります。
例えば:
set +e
if false; then
real_exit_status=$?
echo 'Some useful error message.' >&2
exit $real_exit_status
fi
set -ex
実行時に(すべての)行が表示され、最初のコマンドで停止してゼロ以外を返します(if/while/until
構成の一部としてではありません)。