スクリプトで終了コードを伝播しようとしていますが、exit $?
常に 0 で終了するようです。
リクエストに応じて:
<some command>
if [[ ! -z "$?" ]]
then
echo "Some error"
exit $?
fi
これを書くだけです:
your_command || exit
...または、ログに記録する場合:
your_command || { retval=$?; echo "Failed" >&2; exit "$retval"; }
をデフォルトの終了ステータスとしてexit
使用するため、前者はこれを行う最も簡単で最短の方法です。$?
echo "Some error"
exit $?
$?
コマンドの終了ステータスで、echo
ほとんどの場合 0 です。
$?
非常に壊れやすいと考えてください。どんなコマンドでもそれを破壊します。
また、-z
間違ったテストです。値があるかどうかではなく、引数が空の文字列かどうかをテストします0
。
コマンドの終了ステータスを、直後のコマンドより後で使用する場合は、保存します。
<some command>
status=$?
if [[ "$status" -ne 0 ]]
then
echo "Some error" 1>&2
exit $status
fi