Есть ли способ сделать то, что указано в заголовке из терминальных команд, или мне придется посмотреть на коды?
command
documentation
exit
точный
источник
источник
Коды выхода указывают на состояние сбоя при завершении программы, и они находятся в диапазоне от 0 до 255. Оболочка и ее встроенные функции могут использовать, в частности, значения выше 125 для обозначения конкретных режимов сбоя, поэтому список кодов может различаться в зависимости от оболочек и операционных систем (например, Bash). использует значение 128 + N в качестве состояния выхода). См .: Bash - 3.7.5 Статус выхода или
man bash
.Обычно нулевое состояние выхода указывает на то, что команда выполнена успешно , ненулевое состояние выхода указывает на ошибку .
Чтобы проверить, какой код ошибки возвращается командой, вы можете напечатать
$?
последний код выхода или${PIPESTATUS[@]}
который выдает список значений состояния выхода из конвейера (в Bash) после выхода из сценария оболочки.Нет полного списка всех кодов выхода, которые могут быть найдены, однако была предпринята попытка систематизировать номера статуса выхода в исходном коде ядра, но это в основном предназначено для программистов на C / C ++, и подобный стандарт для сценариев может быть уместным.
Некоторый список сисекситов в Linux и BSD / OS X с предпочтительными кодами выхода для программ (64-78) можно найти в
/usr/include/sysexits.h
(или:man sysexits
в BSD):Приведенный выше список выделяет ранее неиспользованные коды выхода из 64-78. Диапазон нераспределенных кодов выхода будет в дальнейшем ограничен.
Однако приведенные выше значения в основном используются в sendmail и используются практически никем другим, поэтому они не являются чем-то отдаленно близким к стандарту (как указано @Gilles ).
В оболочке статус выхода следующий (на основе Bash):
1
-125
- Команда не выполнена успешно. Проверьте man-страницу команды на предмет значения статуса, несколько примеров ниже:1
- Catchall для общих ошибокПример:
2
- Неправильное использование встроенных командных оболочек (согласно документации Bash)Пример:
6
- Нет такого устройства или адресаПример:
124
- время ожидания команды125
- если команда не работает, см .: coreutils126
- если команда найдена, но не может быть вызвана (например, не является исполняемой)Пример:
127
- если команда не может быть найдена, дочерний процесс, созданный для ее выполнения, возвращает этот статусПример:
128
- Неверный аргументexit
Пример:
128
-254
- сигнал фатальной ошибки "n" - команда умерла из-за получения сигнала. Код сигнала добавляется к 128 (128 + SIGNAL), чтобы получить статус (Linux:,man 7 signal
BSD:)man signal
, несколько примеров ниже:130
- команда прекращена из-за нажатия Ctrl-C, 130-128 = 2 (SIGINT)Пример:
137
- если команде отправляетсяKILL(9)
сигнал (128 + 9), в противном случае статус выхода команды141
-SIGPIPE
- запись на трубе, без считывателяПример:
143
- команда прекращается сигнальным кодом 15 (128 + 15 = 143)Пример:
255
* - выход из состояния вне диапазона.Пример:
Обратите внимание, что значения выхода из диапазона могут привести к неожиданным кодам выхода (например, выход 3809 дает код выхода 225, 3809% 256 = 225).
Видеть:
источник
errno
значения используются системными API, они не используются в качестве состояний выхода (они даже не находятся в нужном диапазоне), и они не имеют отношения к сценариям оболочки. Значения Sysexits взяты из sendmail и используются практически никем, они не являются чем-то отдаленно близким к стандарту.Вам придется заглянуть в код / документацию. Однако вещь, которая ближе всего подходит к «стандартизации», это errno.h
источник
errno.h
не имеет значения, когда дело доходит до кодов выхода, только сообщения об ошибках.sysexits.h
. Тем не менее, некоторые программы возвращаютerrno
s, и я думаю, что возвращениеerrno
s имеет смысл. Необработанныеerrno
s распространяются вверх, как исключения, (errno
пребывания, функции возвращают, например,-1
или0|NULL
). Поскольку программы - это просто функции, хотя и функции, которые выполняются в отдельном адресном пространстве, имеет смысл, что программа может продолжитьerrno
распространение через границу процесса."($numeric_code|$bsd_decoded|$errno_plus_one_decoded)"
.Насколько я знаю, есть только два, более или менее, стандартных значения - оба определены
stdlib.h
для использования с exit ():И единственное стандартное значение де-факто, то есть имеющее одинаковое значение для всех программ в мире, это 0 (ноль), что означает УСПЕХ.
Различные программы вводят разные списки возвращаемых кодов «сбоя», чтобы различать или подчеркивать разные ошибки (разные типы или серьезность). Некоторые программы даже используют возвращенное значение, чтобы сообщить целое число обнаруженных ошибок времени выполнения (например, количество неудачных юнит-тестов в костюме).
Я бы не рекомендовал вводить какой-либо «новый стандарт», расширяющий
stdlib.h
источник