Приложение C. Коды завершения, имеющие
предопределенный смысл
Таблица C-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
имеют предопределенное значение,
поэтому вам следует избегать употребления этих кодов для своих
нужд. Завершение сценария с кодом возврата exit 127, может привести в
замешательство при поиске ошибок в сценарии (действительно ли он
означает ошибку "команда не найдена"? Или это
предусмотренный программистом код завершения?). В большинстве
случаев, программисты вставляют exit 1, в качестве реакции на ошибку.
Так как код завершения 1 подразумевает целый
"букет" ошибок, то в данном случае трудно говорить о
какой либо двусмысленности, хотя и об информативности --
тоже.
Не раз предпринимались попытки систематизировать коды
завершения (см. /usr/include/sysexits.h), но эта
систематизация предназначена для программистов, пишущих на языках
C и C++. Автор документа предлагает ограничить коды завершения,
определяемые пользователем, диапазоном 64 - 113 (и, само собой
разумеется -- 0, для обозначения успешного завершения), в
соответствии со стандартом C/C++. Это сделало бы поиск ошибок
более простым.
Все сценарии, прилагаемые к данному документу, приведены в
соответствие с этим стандартом, за исключением случаев, когда
существуют отменяющие обстоятельства, например в Пример 9-2.
 |
Обращение к переменной $?, из командной
строки, после завершения работы сценария, дает результат,
в соответствии с таблицей, приведенной выше, но только
для Bash или sh. Под управлением csh или
tcsh значения могут в
некоторых случаях отличаться.
|