diff
マンページで、これらの終了値を見つけました。
0 No differences were found.
1 Differences were found.
>1 An error occurred.
異なるエラーに対して1を超える異なる終了値がありますか?
diff
コマンドに依存します。私(GNU diffutils 3.0)のコメント:
終了ステータス
0
は違いが見つからなかったことを意味し、1
は違いが見つかったことを意味し、2
は問題を意味します。通常、異なるバイナリファイルはトラブルとしてカウントされますが、-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
およびnawk
コマンドと、別個のgrep
およびegrep
コマンドが存在した理由です。
* @ chusによるコメントに従って更新。
私の場合、diffは127を返し、それを検索して、tldp.orgの「特別な意味を持つ終了コード」で見つけました。
127 "command not found" illegal_command $ PATHまたはタイプミスで問題が発生した可能性があります。
Diffに間違ったパスを使用しました。 :)
フォント:tldp.org/LDP/abs/html/exitcodes.html