bashスクリプトの最後の終了コード

bashスクリプトの最後の終了コードの意味について混乱しています:その終了コードを知っています0は、正常に終了したことを意味し、終了コード番号がもっとたくさんあることを意味します(私が間違っていない場合は127ですか?)

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

コメント

  • スクリプトが

、スクリプト内で何が起こったかに関係なく、終了コード0で終了します。

  • @Hatclockなぜ'完全に誓約された回答を投稿しますか?コメントとしてマークすることはできません。'回答に対して偽のインターネットポイントを取得するとは思いません(正しいですか?)考えてみてください。 ..(迅速な返信のためのkudos)
  • '電話の駅にいますが、電話で入力しすぎるのは本当に好きではありません。 ilkkachuには良い答えがあるようです!
  • @Hatclockいいえ、まったくありません。スクリプトがexit 0で終わる場合、その最後の命令が実行された場合にのみ、コード0で終了します。スクリプトの最後にあるexit 0の唯一の影響は、前の命令のステータスではなく0を返すことです。
  • @Gillesそれはもっと曖昧でした私の側の言葉による返事。スクリプトがexit 0を実行すると、それ以前に何が起こったかに関係なく、終了コード0が返されます。
  • 回答

    組み込みコマンドexitがシェルを終了します( Bashから)参照):

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

    ファイルの最後まで実行すると終了し、最後のコマンドの戻りコードが返されるため、はい、最後のexit 0は、の終了ステータスに関係なく、スクリプトを正常なステータスで終了します。前のコマンド(つまり、スクリプトが最後のexitに到達したと仮定します。)スクリプトの最後で、trueを使用することもできます。またはで終了コードをゼロにします。

    もちろん、iv id =”の内部からexitを使用することがよくあります。 b24dfb915f “>

    でスクリプトを途中で終了します。

    1を出力する必要があります($?には、前のコマンドで返された終了コードが含まれています) :

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

    これは0を出力するはずですが:

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

    私はそうではありませんexitの実行時にスクリプトが「失敗する」という概念が理にかなっている場合は、スクリプトによって実行される一部のコマンドが失敗する可能性は十分にありますが、スクリプト自体は成功する可能性があります。 。成功するものと失敗するものを決定するのはスクリプトの作成者次第です。

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

    コメント

    • かっこいい、私は' 8ビットの終了コードの番号付けについて知りませんでした。ありがとうございます!
    • プロセスが強制終了されても、終了コード> 127で終了しないことに注意してください。'$?を128 + signumに設定しているだけです。詳細については、プロセス終了時のデフォルトの終了コード?を参照してください。
    • exit 0は返されるだけです0、終了が実行された場合。 (別のルートで終了する可能性があります。)

    回答

    0は成功を意味し、正の整数は失敗を意味します。 255の異なるエラーコードがありますが、値126以上は、プログラムを開始できなかった(126または127)か、シグナルによって強制終了された(129以上)ことを示すために予約されています。プロセスが終了したときのデフォルトの終了コード?および詳細については、bash関数/スクリプトで使用できる戻り/終了値を教えてください。

    シェルスクリプトの終了ステータスは、スクリプトが最後に実行したコマンドの終了ステータスです。たとえば、

    #!/bin/sh somecommand 

    somecommandの終了ステータス、

    #!/bin/sh somecommand exit 0 

    は、somecommandが返されました。この2番目のスクリプトも記述できます

    #!/bin/sh somecommand true 

    スクリプトの最後にexit 0を配置しても必ずしも発生しません これにより、スクリプトの終わりに達したときにのみ0が返されます。たとえば、次のスクリプトは常に3を返します。

    #!/bin/sh exit 3 exit 0 

    次のスクリプトは、構文エラーに関するメッセージを表示するだけでなく、常にエラーコードを返します。

    #!/bin/sh } exit 0 

    次のスクリプトは、スクリプトに応じて1または0を返します。 最初の引数:

    #!/bin/sh if [ "$1" = "foo" ]; then exit 1 fi exit 0 

    次のスクリプトは、iv id = “6c673f16d7″であるため、somecommandのステータスを返します。 >

    は、somecommandが失敗した場合にスクリプトを終了させます:

    #!/bin/sh set -e somecommand exit 0 

    コメントを残す

    メールアドレスが公開されることはありません。 * が付いている欄は必須項目です