shコマンドの終了状態?

shコマンドの終了状態?

こんにちは、私は別のシェルスクリプトの中からシェルスクリプトを呼び出しています。スクリプト呼び出しが成功したら、続行する必要があります。 shコマンドを使用して別のスクリプトを呼び出します。たとえば、次のようになります。

sh payloadjob.sh
if [[ $? -eq 0 ]]; then
    echo Success message 
else
    echo Failure message
fi

ただし、スクリプト呼び出しが成功しても終了ステータス1が提供されますが、成功するには0を返す必要があります。なぜこれが起こるのか、そしてshコマンドによるスクリプト呼び出しが成功したのはどうすればわかりますか?

答え1

payload.shスクリプトが明示的またはexit 0終了しない場合、exit 1終了状態はスクリプトの最後のコマンドの終了状態になります。

最後のコマンドが実行された場合(たとえば、見つからないか削除できない場合)、終了ステータスrm something 2>/dev/nullは0ではありません。something

表示されるスクリプトでは、変数を正しくテストしています$?。また、テストを同等に単純化することもできます。

if sh payload.sh; then
    echo "Success"
else
    echo "Failure"
fi

関連情報