Приложение D. Коды завершения, имеющие предопределенный смысл | Популярный Linux

Опубликовано Bash в Ср, 23/12/2009 — 21:08


Таблица D-1. «Зарезервированные» коды завершения

Код завершения Смысл Пример Примечание
1 разнообразные ошибки let «var1 = 1/0» различные ошибки, такие как «деление на ноль» и пр.
2 согласно документации к Bash — неверное
использование встроенных команд
  Встречаются довольно редко, обычно код
завершения возвращается равным 1
126 вызываемая команда не может быть
выполнена
  возникает из-за проблем с правами
доступа или когда вызван на исполнение неисполняемый
файл
127 «команда не
найдена»
  Проблема связана либо с переменной
окружения $PATH, либо с
неверным написанием имени команды
128 неверный аргумент команды exit exit 3.14159 команда exit может принимать только
целочисленные значения, в диапазоне 0 — 255
128+n фатальная ошибка по сигналу «n» kill -9
$PPID сценария
$? вернет 137 (128
+ 9)
130 завершение по Control-C   Control-C — это выход по сигналу 2,
(130 = 128 + 2, см. выше)
255* код завершения вне допустимого
диапазона
exit -1 exit
может принимать только целочисленные значения, в
диапазоне 0 — 255

Согласно этой таблице, коды завершения 1 — 2, 126 — 165 и 255 [67] имеют предопределенное значение, поэтому вам следует избегать употребления этих кодов для своих нужд. Завершение сценария с кодом возврата exit 127, может привести в замешательство при поиске ошибок в сценарии (действительно ли он означает ошибку «команда не найдена»? Или это предусмотренный программистом код завершения?). В большинстве случаев, программисты вставляют exit 1, в качестве реакции на ошибку. Так как код завершения 1 подразумевает целый «букет» ошибок, то в данном случае трудно говорить о какой либо двусмысленности, хотя и об информативности — тоже.

Не раз предпринимались попытки систематизировать коды завершения (см. /usr/include/sysexits.h), но эта систематизация предназначена для программистов, пишущих на языках C и C++. Автор документа предлагает ограничить коды завершения, определяемые пользователем, диапазоном 64 — 113 (и, само собой разумеется — 0, для обозначения успешного завершения), в соответствии со стандартом C/C++. Это сделало бы поиск ошибок более простым.

Все сценарии, прилагаемые к данному документу, приведены в соответствие с этим стандартом, за исключением случаев, когда существуют отменяющие обстоятельства, например в Пример 9-2.

Note

Обращение к переменной $?, из командной строки, после завершения работы сценария, дает результат, в соответствии с таблицей, приведенной выше, но только для Bash или sh. Под управлением csh или tcsh значения могут в некоторых случаях отличаться.


[67]    Указание кода завершения за пределами установленного диапазона, приводит к возврату ошибочных кодов. Например, exit 3809 вернет код завершения, равный 225.

Запись опубликована в рубрике Без рубрики. Добавьте в закладки постоянную ссылку.