🐧 Что такое коды выхода Bash в Linux

by itisgood

Что такое экзит коды

Каждый скрипт, команда или двоичный файл завершается с кодом возврата.

Вы можете увидеть это значение в специальной переменной $?.

Коды возврата являются числовыми и ограничиваются значением от 0 до 255, поскольку используется 8-разрядное целое число без знака.

Если вы используете значение -1, он вернет 255.

Каждое выполнение завершается кодом завершения, удачным или нет, с сообщением об ошибке или без вывода сообщений.

Например:

$ date ; echo $?
Sat Jan 18 08:06:07 IST 2020
0
Как видите, код выхода равен 0, потому что команда была выполнена без проблем.
Теперь давайте попробуем это:
$ wrngcmd ; echo $?
-bash: wrngcmd: command not found
127
Эта команда не найдена, поскольку мы просто набрали бессмысленную группу символов.

Зарезервированные экзит коды Bash

Подобно коду выхода «0», который обозначает успех команды, bash имеет несколько зарезервированных кодов выхода для различных ситуаций.

Поэтому в идеале, если вы используете команду выхода в скрипте и вам нужно указать код выхода, не используйте эти зарезервированные коды выхода, так как они могут привести к противоречивым результатам.

Код выхода
Смысл Пример Комментарий
1 Catchall для общих ошибок let “var1 = 1/0”
Разные ошибки, такие как «деление на ноль» и другие недопустимые операции
2
Злоупотребление встроенными оболочками
empty_function() {}
Отсутствует ключевое слово или команда
126
Вызванная команда не может быть выполнена
/dev/null
Проблема с правами или команда не является исполняемым
127 “command not found” illegal_command Возможная проблема с $PATH или опечаткой
128 Неверный аргумент для выхода exit 3.14159
exit принимает только целочисленные аргументы в диапазоне 0 – 255 (см. первую сноску)
128 +n
Сигнал фатальной ошибки «n»
kill -9 $PPID
$? возвращает 137 (128 + 9)
130
Скрипт прекращен с помощью Control-C
Ctrl-C
Control-C – это сигнал 2 фатальной ошибки (130 = 128 + 2, см. Выше)
255*
Выход из состояния вне диапазона
exit -1
выход принимает только целочисленные аргументы в диапазоне 0 – 255
Давайте разберем код выхода «128 + n» на примере.
Запустите бесконечный цикл, как показано ниже:
#!/bin/bash    
while true; do    
echo ${$}    
done
Если вы запустите этот скрипт, он будет выодить один и тот же PID до тех пор, пока вы не убьете его или не нажмете «CTRL + C».
Давайте попробуем сделать «CTRL + C» и посмотреть, какой код выхода.
# sh test.sh
....
2582
2582
2582
2582
2582
2582
^C
geeklab$ echo $?
130
Как видите, код выхода – «128 + 2», т. е 130.
Точно так же, если мы уничтожаем скрипт с помощью «kill -9», код выхода должен быть «128 + 9», т. е. 137.
Давайте посмотрим пример:
# sh test.sh
....
2582
2582
2582
...
# kill -9 [pid_of_script]
....
2602
2602
Killed: 9
geeklab$ echo $?
137

Loading

You may also like

Leave a Comment