> log else echo "failed" >>"> > log else echo "failed" >>"> > log else echo "failed" >>" />

bashスクリプトには戻りコード自体がありますか?

私は、コマンドが実行された後に戻りコードが $?に含まれることを知っていますが、スクリプトの実行後には $?そのスクリプトの最後のコマンドの戻りコード?

スクリプトが頭から尾に振り分けられていて、予期しないシステムの停止などによって中断されていないかどうかを確認できますか?

私は以下のようなスクリプトを出した場合、

Command A;
if [ $? -eq 0]
then
echo "OK" >> log
else
echo "failed" >> log
fi

A の実行中にシステムが停止した場合、そのログファイルでは何が見つかりますか? "OK"、 "失敗"、または何もありませんか?

3

3 答え

  1. はい、または exit の後に値が渡されます。 exit 31

6
追加された
他のスクリプトが割り込みによって終了された場合、シェルに報告された終了ステータスはゼロになりません(スクリプトが割り込みを処理または無視し、すべて終了した後でゼロ終了するように設定されていない場合を除く)。システムが停止した場合、呼び出し元のスクリプトも停止しました。再試行などを処理するための非常に洗練されたシステムを持っていなければ、何も判断できません。
追加された 著者 Jonathan Leffler,
スクリプトが最後に実行したコマンドが exit ではない場合(たとえば、スクリプトファイルの最後まで実行されたために終了した場合や、 set -e とエラー)、スクリプトの戻りコードは最後に実行したコマンドの戻りコードになります。
追加された 著者 Gordon Davisson,
それは "はい"でしょう。
追加された 著者 Ignacio Vazquez-Abrams,
ご協力いただきありがとうございます:)
追加された 著者 erical,

$?実行された最後のコマンドの終了ステータスを読み取ります。関数が返った後、$?関数で最後に実行されたコマンドの終了ステータスを返します。これは、関数に "戻り値"を与えるBashの方法です。

#!/bin/bash

echo hello
echo $?    # Exit status 0 returned because command executed successfully.

lskdf      # Unrecognized command.
echo $?    # Non-zero exit status returned because command failed to execute.

echo

exit 113   # Will return 113 to shell.
       # To verify this, type "echo $?" after script terminates.

#  By convention, an 'exit 0' indicates success,
#+ while a non-zero exit value means an error or anomalous condition
4
追加された
ご協力いただきありがとうございます:)
追加された 著者 erical,

スクリプトの戻りコードは実際に実行された最後のコマンドの戻りコードであり、いくつかのコマンドは任意の時点で実行を終了させ、任意に戻りコードを設定することができます。スクリプトの場合は exit で、関数の場合は return ですが、引数を省略すると前のコマンドの戻りコードだけが使用されます。

0
追加された