マンページで、diff
これらの終了値を見つけました。
0 No differences were found.
1 Differences were found.
>1 An error occurred.
エラーごとに1を超えるさまざまな終了値がありますか?
それはあなたのコマンドに依存しますdiff
。鉱山(GNU diffutils 3.0)は次のように述べています。
の終了ステータスは
0
、違いが見つからなかったことを1
意味し、いくつかの違いが見つかったことを2
意味し、トラブルを意味します。通常、異なるバイナリファイルは問題としてカウントされますが、これはorオプションまたはorオプションを使用して 変更-a
でき--text
ます。-q
--brief
使用する 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
コマンドと別のgrep
andコマンドがあった理由egrep
です。
*@chus のコメントに従って更新されました。
私の場合、diff
127が返されました。それを検索し、tldp.orgの「特別な意味を持つ終了コード」で見つけました
127 "コマンドが見つかりません" - illegal_command - $PATH またはタイプミスに問題がある可能性があります。
diff に間違ったパスを使用しました。:)
フォント: Advanced Bash-Scripting Guide .