
Мне трудно найти полный и актуальный список кодов ошибок Bash. Например:
$ udevadm info /dev/sdx; echo Exit code $?
Unknown device, --name=, --path=, or absolute path in /dev/ or /sys expected.
Exit code 4
Как можно найти такие коды выхода?
решение1
Есть несколько кодов выхода сзарезервированные специальные значения:
Код выхода Номер Значение 1 Сборник для общих ошибок 2 Неправильное использование встроенных функций оболочки (согласно документации Bash) 126 Вызванная команда не может быть выполнена 127 "команда не найдена" 128+n Сигнал фатальной ошибки "n" 130 Скрипт завершен Ctrl-C 255* Статус выхода вне диапазона
Все, что ниже 125, является честной игрой для разработчиков, и на самом деле может быть только предсказано, какl0b0 отмечает в своем ответе, прочитав man
страницу приложения или исходный код, чтобы определить, что означает код (если он вообще документирован).
решение2
вкратцеКоды выхода зависят от приложения.
Существуют некоторые свободные соглашения. false
и все, что успешно префиксировано !
(например ! true
, ) в оболочках POSIX, возвращает код выхода 1, но разработчик может использовать любой код выхода от 0 до 255 для чего угодно. В конечном итоге вам придется посмотреть на его документацию (в лучшем случае) или код (в худшем случае), чтобы узнать, что он означает. Для программ со man
страницами коды выхода часто будут перечислены в разделе с именем EXIT STATUS
(инструменты GNU, например find
).
Некоторые популярные значения перечислены в /usr/include/sysexits.h
- я стараюсь использовать их, когда это возможно.@AnsgarEsztermann отмечает, это не справочник по Bash или даже справочник по приложению, за исключением тех, кто решил его использовать (в первую очередь разработчики C/C++по данным АБС).