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構成の一部としてではありません)。