Bashスクリプトの終わりの終了コード

Bashスクリプトの終わりの終了コード

Bashスクリプトの終わりにある終了コードの意味は混乱しています。終了コード0は正常に完了したことを意味し、より多くの終了コード番号があります(私の記憶が正しい場合は127ですか?)。

私の質問は、スクリプトの最後に終了コード0が表示された場合、スクリプトが失敗しても終了コードが0になるように強制することですか、それとも別の意味がありますか?

ベストアンサー1

組み込みコマンドはexitシェルを終了します(バッシュリファレンス):

exit [n]
シェルを終了し、状態 n をシェルの親に返します。 nが省略された場合、終了ステータスは最後に実行されたコマンドのステータスです。 EXIT のすべてのトラップは、シェルが終了する前に実行されます。

ファイルの最後まで実行すると、最後のコマンドの戻りコードで終了exit 0します。 (つまり、スクリプトが最後に到達したと仮定しますexit。)スクリプトの最後で、trueまたはを使用して:終了コード0を取得することもできます。

exitもちろん、より一般的にはfrom内でスクリプトを途中で終了しますif

これは1($?前のコマンドから返された終了コードを含む)を印刷する必要があります。

sh -c "false" ; echo $?
sh -c "false; exit" ; echo $?

0を印刷する必要がありますが:

sh -c "false; exit 0" ; echo $?

exitスクリプトが実行されるコマンドの中には失敗する可能性がありますが、スクリプト自体は成功する可能性が高いため、実行時にスクリプトが「失敗する」という概念が意味があるかどうかはわかりません。何が成功し、何が失敗するかを決定するのは脚本家の役割です。

また、終了コードの標準範囲は0..255です。シェルは、127以上のコードを使用してプロセスがシグナルによって終了したことを示しますが、通常の方法で返すことができます。システムwaitコールは実際にはより広い値を返し、残りはオペレーティングシステムによって設定されたステータスビットを含みます。

おすすめ記事