Как найти значение кода выхода для утилит командной строки Linux?

У меня есть мое приглашение (bash), настроенное для вывода кода выхода из последней команды, если оно не было успешным (ака не ноль). Поэтому я вижу много кодов выхода, даже если у программы нет проблем. Есть ли способ поиска значения этих кодов выхода?

Я всегда стараюсь использовать страницы руководства, информационные страницы или опцию "-help", но безрезультатно.

Чтобы уточнить, я спрашиваю об утилитах, которые поставляются с Linux, например cd, ls, du,...

Ответы

Ответ 1

Не существует стандартизированного значения для кодов выхода программ за пределами "0". все остальное означает, что что-то пошло не так ". И строго, это относится только к C и С++ - там, exit(0); или exit(EXIT_SUCCESS); оба выхода с успехом, но значение, возвращаемое в O/S, может быть другим.

Существуют исключения даже для правила "нуль-на-успех". Очевидно, есть небрежные программы, которые не возвращают определенный статус выхода; такие программы лучше избегать. Существуют и другие не столь небрежные программы, которые всегда возвращают 0, даже если что-то пошло не так; их также часто избегают.

Однако существуют также программы, которые тщательно кодируют довольно много информации в статус выхода, и просто получение ненулевого статуса выхода не означает, что такие программы не удались. Конечно, программы документируют значения статусов выхода.

POSIX осторожно документирует состояния выхода для программ.

Страницы руководства для программы должны документировать статусы выхода. В Unix, если такой документации нет, тогда принимайте zero-on-success, а все остальное - сбой.

Обратите внимание, что если bash не может выполнить команду, он вернет стилизованные статусы:

  • 127, если файл не существует или не может быть найден
  • 126, если у вас нет разрешения на выполнение в файле

Кроме того, если программа умирает из-за сигнала, bash позволяет вам узнать, закодировав статус выхода как:

  • 128 + signal-number

Следовательно, SIGHUP дает 129, SIGILL дает 132, SIGTERM дает 143 и т.д. Однако программа может выйти с любым из этих статусов и означать что-то отличное от того, что означает bash. Тем не менее, это относительно необычная программа, которая выходит из любого из этих статусов выхода, поэтому вы обычно безопасны.

Обратите внимание, что разные операционные системы имеют разные соглашения: Unix обеспечивает 8-битный статус с нулем для успеха; Windows предоставляет гораздо больший диапазон значений статуса выхода (16 бит или 32 бита); Полагаю, что VMS использовал нуль для обозначения отказа.

Ответ 2

Страницы руководства являются обычным местом для этой документации. Если вы находитесь на. Debian, вы даже должны были сообщать об ошибке с утилитами, которые имеют недокументированные коды выхода.