Bash関数/スクリプトでどの戻り/終了値を使用できますか?

Bash関数/スクリプトでどの戻り/終了値を使用できますか?

ex.と間違えないように、私たちが使用できる戻り値が何であるかを知りたいです。信号知能?

前任者。 :

$sleep 10
$#hit ctrl+c
$echo $?
130

だから私は次のものが利用できないことを知っていますreturn 130exit 130

したがって、これは誤解を招く可能性があります。

$function FUNC(){ return 130; };FUNC;echo $?
130

ベストアンサー1

プロセスの終了ステータスは値でエンコードされます。0~255、これが終了コードで使用できるすべてです。この範囲外の値を渡すと、ほとんどのシェルは残りのモジュールとして256を使用します。一部のシェルでは、関数はより広い範囲の整数値を使用できます。

終了コードの唯一の規則は次のとおりです。0 は成功を示し、その他の値は失敗を示します。。このルールはUnixを超えています。これは、他のオペレーティングシステム(DOS、Windows、および終了コードの概念を持つ多くの組み込みシステムを含みますが、VMSは異なる方法で実行されます)でも一般的なルールです。 UNIXシステムでは、シェルのブール構造(、、、、、、、、... )ifとすべてwhileの標準ユーティリティに組み込まれています。 POSIX Cプログラムでは&&||!set -emakeEXIT_SUCCESS0でEXIT_FAILUREゼロ以外の値(通常1)です。

失敗終了コードの選択に関する規則(事実上または法的)はありません。少数のPOSIXユーティリティだけが特定のエラー状態コードを強制します。

  • !シェル演算子は、オペランドが 0 を返すと 1 を返します。 and&&演算子は||前のコマンドの状態を渡します。
  • cmpそしてdiff個々のファイルの場合は1、エラー状態の場合は≥2を返します。
  • expr式が 0 または null と評価された場合は 1 を返し、式が無効な場合は 2 を返し、その他のエラーでは ≥3 を返します。
  • grep「見つかりません」の場合は1を返し、エラー条件の場合は≥2を返します。多くの検索コマンドがこれに従います(ただし、find一致するファイルがない場合は0を返しません)。
  • mesgYesの場合は0、Noの場合は1、エラーの場合は≥2を返します。
  • patchブロックが拒否された場合は1を返し、その他のエラーの場合は≥2を返します。
  • sort -cファイルデータがソートされていない場合は1を返し、エラーがある場合は≥2を返します。
  • compressそしてlocaledef特定のエラーに対して小さな値を定義します。

大きな値がより深刻な失敗を意味するという共通の信念がありますが、普遍的ではありません。grep(このパターンは存在しますか?)やdiff(このファイルは同じですか?)などのブール条件をテストするコマンドの場合、1は「いいえ」を意味し、値が高いほどエラーを示します。また、126以上の値はほとんど使用されません。commandenvこれは、POSIXコマンドniceと一緒にシェルに書き込まれるためですnohuptime

  • 126及び127は、外部コマンド呼び出しの失敗を示す。
  • 128 以上の値は、$?コマンドが信号によって終了したことを示します。

/usr/include/sysexits.hいくつかの値とその意味がリストされていますが、sendmailからのものであり、電子メールの配信に関連していないプログラムの外では見たことがありません。

つまり、成功した場合は0、失敗した場合は1または2を返します。障害条件を区別する必要がある場合は、1から始めて、より深刻な障害の値を増やします。

おすすめ記事