Таблица 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.
Обращение к переменной $?, из командной строки, после завершения работы сценария, дает результат, в соответствии с таблицей, приведенной выше, но только для Bash или sh. Под управлением csh или tcsh значения могут в некоторых случаях отличаться. |
[67] Указание кода завершения за пределами установленного диапазона, приводит к возврату ошибочных кодов. Например, exit 3809 вернет код завершения, равный 225.
- Страница для печати
- 11284 просмотра