Подтвердить что ты не робот

Каковы значения выхода ошибки для diff?

На man-странице diff я нашел эти значения выхода:

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

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

4b9b3361

Ответ 1

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

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

Ответ 2

Там, возможно, могут быть разные коды ошибок в зависимости от используемой вами версии diff. Если я правильно помню, стандартная BSD diff всегда возвращала код выхода из 0, 1 или 2.

Тем не менее, manpage не отображает все, что может сделать diff, но документацию, которую вы можете использовать для использования команды diff. В оболочке script я хочу знать, соответствуют ли файлы (exit = 0) или не совпадают (exit = 1). Однако в моей оболочке script я также хочу знать, что сама команда 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 ]
   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 ]
   echo "$file1 and $file2 differ"
else
   echo "$file1 and $file2 are the same file"
fi

В приведенном выше коде я проверил код ошибки 2 и 1, но не 3. Итак, вместо обнаружения отсутствующего файла я предполагаю, что файлы соответствуют.

Кадровая страница пытается удостовериться, что будущие обновления ОС не заставят большинство сценариев оболочки внезапно выйти из строя. Это объясняет, почему существуют отдельные команды awk и nawk и отдельная команда grep и egrep.

* Обновлено как комментарий от @chus.

Ответ 3

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

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

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

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