69

マンページで、diffこれらの終了値を見つけました。

    0     No differences were found. 
    1     Differences were found.
   >1     An error occurred.

エラーごとに1を超えるさまざまな終了値がありますか?

4

3 に答える 3

78

それはあなたのコマンドに依存しますdiff。鉱山(GNU diffutils 3.0)は次のように述べています。

の終了ステータスは0、違いが見つからなかったことを1意味し、いくつかの違いが見つかったことを2意味し、トラブルを意味します。通常、異なるバイナリファイルは問題としてカウントされますが、これはorオプションまたはorオプションを使用して 変更-aでき--textます。-q--brief

于 2011-08-07T07:09:23.470 に答える
9

使用する diff のバージョンに応じて、異なるエラー コードが存在する場合もあれば、存在しない場合もあります。私の記憶が正しければ、標準の BSD diff は常に 0、1、または 2 の終了コードを返しました。

ただし、マンページは diff が行う可能性のあるすべてをマッピングしているわけではありませんが、diff コマンドを使用するために使用できるドキュメントです。シェル スクリプトで、ファイルが一致したか (exit = 0)、または一致しなかったか (exit = 1) を知りたいです。ただし、私のシェル スクリプトでは、diff コマンド自体が機能しなかったことも知りたいと考えています。

diff $file1 file2 > /dev/null 2>&1
error=$?
if [ $error -eq 0 ]
then
   echo "$file1 and $file2 are the same file"
elif [ $error -eq 1 ]
then
   echo "$file1 and $file2 differ"
else
   echo "There was something wrong with the diff command"
fi

2 は diff コマンドが失敗したことを意味すると言われましたが、新しいバージョンの diff コマンドでは、読み取れないファイル (exit = 2) と見つからないファイル (exit = 3) が区別されたとします。ここで、以前のバージョンの diff コマンドで次のことを行ったが、$file2存在しなかったとします。

diff $file1 file2 > /dev/null 2>&1
error=$?
if [ $error -eq 2 ]
then
   echo "There was something wrong with the diff command"
elif [ $error -eq 1 ]
then
   echo "$file1 and $file2 differ"
else
   echo "$file1 and $file2 are the same file"
fi

上記のコードでは、2 と 1 のエラー コードをチェックしましたが、3 はチェックしませんでした。そのため、欠落ファイルを検出する代わりに、ファイルが一致すると仮定します。

マンページは、OS の将来のアップグレードによって、ほとんどのシェル スクリプトが突然失敗しないようにすることを目的としています。awkこれが、別のandnawkコマンドと別のgrepandコマンドがあった理由egrepです。

*@chus のコメントに従って更新されました。

于 2011-08-15T16:47:18.597 に答える
2

私の場合、diff127が返されました。それを検索し、tldp.orgの「特別な意味を持つ終了コード」で見つけました

127 "コマンドが見つかりません" - illegal_command - $PATH またはタイプミスに問題がある可能性があります。

diff に間違ったパスを使用しました。:)

フォント: Advanced Bash-Scripting Guide .

于 2015-12-22T12:15:59.893 に答える