Exと間違われない、使用できる戻り値を知りたいのですが。 SIGINT?
例:
$sleep 10
$#hit ctrl+c
$echo $?
130
だから私はreturn 130
やexit 130
のようなものを使ってはいけないことを知っています
これは誤解を招くでしょう:
$function FUNC(){ return 130; };FUNC;echo $?
130
予約済み終了コード以外の0から255までの任意の数値を使用できます( 詳細はこちらをクリック )
プロセスの終了ステータスは、値から255までとしてエンコードされるため、終了コードとして使用できるのはこれだけです。その範囲外の値を渡すと、ほとんどのシェルは256を法とする剰余を使用します。一部のシェルでは、関数に対してより広い範囲の整数値を使用できます。
終了コードの唯一のルールは、は成功を意味し、その他の値は失敗を意味するです。このルールはUNIXを超えています。これは、他のオペレーティングシステム(DOS、Windows、および終了コードの概念を持つ多くの組み込みシステムを含む)でも一般的な規則ですが、VMSの動作は異なります。 UNIXシステムでは、シェルのブール構造(if
、while
、&&
、||
、!
、set -e
、 …)、make
に入れ、その後にすべての標準ユーティリティを続けます。 POSIX Cプログラムでは、 EXIT_SUCCESS
は0で、EXIT_FAILURE
はゼロ以外の値(通常は1)です。
失敗の終了コードの選択に関する規則(事実上または正当な理由)はありません。特定の障害ステータスコードを義務付けるPOSIXユーティリティはごくわずかです。
!
Shell演算子は、オペランドが0を返す場合、1を返します。&&
および||
演算子は、最後のコマンドからのステータスを渡します。cmp
および diff
異なるファイルの場合は1を返し、エラー状態の場合は≥2を返します。expr
式がゼロまたはヌルと評価された場合は1を返し、無効な式の場合は2を返し、その他のエラーの場合は≥3を返します。grep
「見つかりません」の場合は1を返し、エラー状態の場合は≥2を返します。多くの検索コマンドがこれに従います(ただし、一致するファイルがない場合に0を返すfind
には従いません)。mesg
はいの場合は0、いいえの場合は1、エラーの場合は≥2を返します。patch
hunkが拒否された場合は1を返し、その他のエラーの場合は≥2を返します。sort -c
ファイルデータが並べ替えられていない場合は1を返し、エラーの場合は≥2を返します。compress
および localedef
は、特定のエラーに対していくつかの小さな値を定義します。値が大きいほど障害が悪化するという一般的な考えがありますが、普遍的ではありません。 grep
(このパターンは存在しますか?)やdiff
(これらのファイルは同一ですか?)などのブール条件をテストするコマンドの場合、1は「いいえ」を意味し、値が大きいほどエラーを示します。さらに、126以上の値はめったに使用されません、これらはシェル(およびPOSIXコマンドcommand
、env
、Nice
、 Nohup
およびtime
):
$?
の128を超える値は、シグナルによって終了されたコマンドを示します。/usr/include/sysexits.h
いくつかの値とその意味がリストされていますが、これはsendmailからのものであり、メール配信に関係のないプログラム以外では見たことがありません。
要約すると、成功した場合は0を返し、失敗した場合は1または2を返します。失敗のケースを区別する必要がある場合は、1から始めて、より大きな失敗の値を増やします。
技術的には、0〜255の任意の値を使用できます。ただし、使用できる既存の規則がいくつかあります。
errno --list
は現在、134個の定義済みエラーを表示します。一般に、スクリプト内で使用される終了コード、または少なくともどの規則に従っているかを文書化することをお勧めします。また、終了する前に次のような特徴的なメッセージを表示すると便利です。
# using sysexits.h
echo "EX_USAGE: invalid argument: $1" > /dev/stderr
exit 64
# using errno.h
echo "ENOENT: File not found: $file" > /dev/stderr
exit 2