Каковы значения выхода из ошибки для diff? - PullRequest
54 голосов
/ 07 августа 2011

На странице руководства diff я нашел следующие значения выхода:

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

Существуют ли разные значения выхода выше 1 для разных ошибок?

Ответы [ 3 ]

57 голосов
/ 07 августа 2011

Это зависит от вашей команды diff. Мой (GNU diffutils 3.0) говорит:

Статус выхода 0 означает, что никаких различий не найдено, 1 означает, что некоторые различия были найдены, и 2 означает проблемы. Как правило, отличается двоичные файлы считаются проблемой, но это можно изменить с помощью -a или --text, либо -q или --brief.

7 голосов
/ 15 августа 2011

Может быть, или не может быть разных кодов ошибок в зависимости от используемой вами версии 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.

3 голосов
/ 22 декабря 2015

В моем случае diff вернул 127, искал его и нашел в tldp.org "Коды выхода со специальными значениями"

127 «команда не найдена» invalid_command Возможная проблема с $ PATH или опечаткой.

Я использовал неверный путь к diff. :)

Шрифт: tldp.org/LDP/abs/html/exitcodes.html

...