-2

スクリプトで終了コードを伝播しようとしていますが、exit $?常に 0 で終了するようです。

リクエストに応じて:

<some command>
if [[ ! -z "$?" ]]
then
    echo "Some error"
    exit $?
fi
4

2 に答える 2

3

これを書くだけです:

your_command || exit

...または、ログに記録する場合:

your_command || { retval=$?; echo "Failed" >&2; exit "$retval"; }

をデフォルトの終了ステータスとしてexit使用するため、前者はこれを行う最も簡単で最短の方法です。$?

于 2013-10-29T23:44:47.770 に答える
1
echo "Some error"
exit $?

$?コマンドの終了ステータスで、echoほとんどの場合 0 です。

$?非常に壊れやすいと考えてください。どんなコマンドでもそれを破壊します。

また、-z間違ったテストです。値があるかどうかではなく、引数が空の文字列かどうかをテストします0

コマンドの終了ステータスを、直後のコマンドより後で使用する場合は、保存します。

<some command>
status=$?
if [[ "$status" -ne 0 ]]
then
    echo "Some error" 1>&2
    exit $status
fi
于 2013-10-30T00:04:39.753 に答える