В первом приближении 0 - это успех, ненулевое - это сбой, 1 - общий сбой, а все, что больше, - конкретный сбой. Помимо тривиальных исключений false и test, которые предназначены для получения 1 за успех, я обнаружил еще несколько исключений.
Более реалистично, 0 означает успех или неудачу, 1 означает общий сбой или успех, 2 означает общий отказ, если 1 и 0 оба используются для успеха, но, возможно, также и успех.
Команда diff дает 0, если сравниваемые файлы идентичны, 1, если они различаются, и 2, если двоичные файлы различны. 2 также означает неудачу. Команда less дает 1 для сбоя, если только вы не ввели аргумент, в этом случае он выходит из 0, несмотря на сбой.
Команда more и команда spell дают 1 для сбоя, если сбой не является результатом отказа в доступе, несуществующего файла или попытки прочитать каталог. В любом из этих случаев они выходят из 0 несмотря на ошибку.
Тогда команда expr выдает 1 для sucess, если только выводом является пустая строка или ноль, в этом случае 0 - это sucess. 2 и 3 - сбой.
Тогда есть случаи, когда успех или неудача неоднозначны. Когда grep не удается найти шаблон, он выходит из 1, но выходит из 2 для подлинного сбоя (например, отказано в разрешении). Klist также завершает работу с 1, когда не удается найти заявку, хотя это на самом деле не более, чем ошибка, когда grep не находит шаблон или когда вы пустой каталог.
Так что, к сожалению, возможности Unix, по-видимому, не приводят в исполнение какой-либо логический набор правил, даже для очень часто используемых исполняемых файлов.