2011-12-19 13 views
3

私は、コマンドを実行した後にリターンコードが$?に含まれていることがわかっているが、スクリプトが実行された後$?が何を意味するのでしょうか?そのスクリプトの最後のコマンドの戻りコード?スクリプトは尾に頭からexcutedといくつかの予期せぬシステム停止か何かによって中断されませんされている場合bashスクリプトにはリターンコード自体がありますか?

は、私が言うことはできますか?

私はexcuted、

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

Aの実行中にシステムが停止し、以下のようなスクリプトを持っている場合、私はそのログファイルに何を見つけるのだろうか? "OK"、 "失敗"、または何もありませんか?

答えて

6
  1. はい、またはexitの後に渡される値。 exit 31。それが明示的にするために、他のスクリプト内の措置を取らずに

  2. ありません。

+0

他のスクリプトが中断した場合、シェルに報告された終了ステータスはゼロになりません(スクリプトは割り込みを処理または無視し、すべての後にゼロ終了のために配置されます)。システムが停止した場合、呼び出し元のスクリプトも停止してしまいます。再試行などの処理に非常に洗練されたシステムを使用していない限り、何も判断できません。 –

+0

スクリプトが実行する最後のコマンドが 'exit'スクリプトファイルの最後まで実行されたために終了するか、 'set -e'とエラーのために早期に終了した場合)、スクリプトの戻りコードは最後に実行されたコマンドの戻りコードになります。 –

+0

これは「はい」です。 –

4

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

Example

#!/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 
+0

あなたの助けをありがとう:) – erical

0

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

関連する問題