код выхода diff

код выхода diff

Если я запускаю diff -qдва файла, и они идентичны, код выхода, сгенерированный echo $?; 0если файлы различаются, код выхода 1. Почему так? Каким образом первый является diffуспешным, а второй — неудачным?

Я использовал термины «успех» и «неудача», основываясь на моем чтении и ограниченном пониманииhttp://mywiki.wooledge.org/BashGuide/TestsAndConditionals:

  1. Статус выхода
    Каждая команда приводит к коду выхода всякий раз, когда она завершается.
    Этот код выхода используется любым приложением, которое ее запустило, чтобы оценить,
    все ли прошло нормально. Этот код выхода похож на возвращаемое значение из
    функций. Это целое число от 0 до 255 (включительно). Соглашение
    гласит, что мы используем 0 для обозначения успеха и любое другое число для обозначения
    неудачи какого-либо рода.Конкретное число полностью зависит от приложения.,
    и используется для намека на то, что именно пошло не так.

Мне следовало бы дочитать man diffдо конца, где ясно изложены принятые разработчиками соглашения.

решение1

От man diff:

Статус выхода — 0, если входы одинаковы, 1 — если разные, 2 — если возникла проблема.

Я открыто признаю, что это может быть не так.полностью стандартныйно коды выхода естьбольше того, что можно назвать «рекомендациями», чем фактическими правилами.

введите описание изображения здесь

В этом случае отклонение от стандарта позволяет легко запускать diffскрипты.

diff a b && echo "no difference" || echo "differences!"

Это похоже на grepто, что выведет 0, если что-то найдено, и 1, если что-то не найдено. Я не могу объяснить ориентацию между 0 и 1 для diff. Я предполагаю, что они использовали стандартные логические результаты C.

Это не имеет значения. Это просто произвольное число.

решение2

man diffговорит нам

СТАТУС ВЫХОДА

   The following exit values shall be returned:

    0     No differences were found.

    1     Differences were found.

   >1     An error occurred.

Называя значениями выхода «успех» и «неудача», вы сами себя ограничиваете. У программ есть целых 8 бит для статуса выхода, значения от 0 до 255.

Связанный контент