Может быть, или не может быть разных кодов ошибок в зависимости от используемой вами версии diff.Если я правильно помню, стандартная разность BSD всегда возвращала код выхода 0, 1 или 2.
Однако, man-страница отображает не все, что может сделать diff, но документацию, которую вы можете использовать дляиспользуя команду diff.В сценарии оболочки я хочу знать, совпадают ли файлы (выход = 0) или не совпадают (выход = 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 провела различие между файлом, который вы не можете прочитать (выход = 2), и отсутствующим файлом (выход = 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. Таким образом, вместо обнаружения отсутствующего файла, я предполагаю, что файлы совпадают.
Страница man пытается убедиться, что будущие обновления ОС не вызовут большинство ваших сценариев оболочкивнезапно потерпеть неудачуВот почему существовала отдельная команда awk
и nawk
и отдельная команда grep
и egrep
.
* Обновлено согласно комментарию @ chus.