Статус выхода из Linux bash и как установить статус выхода в bash

Bash logo Scripts

Каждая команда Linux или Unix возвращает статус, когда она завершается нормально или ненормально. Вы можете использовать значение статуса выхода в сценарии командного интерпретатора для отображения сообщения об ошибке или запуска команд. Например, если команда tar завершилась неудачно, она возвращает код, который указывает сценарию оболочки отправить электронное письмо сисадминам.

Подробнее о кодах состояния выхода из оболочки Linux bash

  1. Каждая команда Linux или Unix, выполняемая сценарием оболочки или пользователем, имеет статус выхода.
  2. Статус выхода - это целое число.
  3. Для целей оболочки bash команда, которая завершается с нулевым (0) статусом выхода, была успешной.
  4. Ненулевой (1-255) статус выхода означает неудачу.
  5. Если команда не найдена, дочерний процесс, созданный для ее выполнения, возвращает статус 127. Если команда найдена, но не может быть выполнена, статус возврата равен 126.
  6. Все встроенные модули Bash возвращают нулевой статус выхода в случае успеха и ненулевой статус в случае неудачи.

Как отобразить статус выхода из команды shell?

Вы можете использовать специальную переменную оболочки под названием $? для получения статуса выхода ранее выполненной команды. Для вывода переменной $? используйте команду echo/printf. Синтаксис следующий:

Или

Как сохранить статус выхода из команды в переменной оболочки

Присвойте $? переменной оболочки. Синтаксис следующий:

Состояние выхода из Linux и конструкции условного доступа/списка

Простой сценарий оболочки для определения имени хоста

Как использовать операторы && и || с кодами выхода

Синтаксис следующий:

Если каталог с именем "/tmp/foo" не найден, создайте его:

Например, покажите синтаксис использования, когда имя файла не передается в качестве аргумента командной строки:

Список общих кодов выхода для GNU/Linux

Код Описание
0 Успех
1 Операция не разрешена
2 Нет такого файла или каталога
3 Нет такого процесса
4 Прерванный системный вызов
5 Ошибка ввода/вывода
6 Нет такого устройства или адреса
7 Слишком длинный список аргументов
8 Ошибка формата выполнения
9 Плохой дескриптор файла
10 Нет дочерних процессов
11 Ресурс временно недоступен
12 Невозможно выделить память
13 Отказано в разрешении
14 Плохой адрес
15 Требуется блокирующее устройство
16 Устройство или ресурс заняты
17 Файл существует
18 Недопустимая межустройственная связь
19 Нет такого устройства
20 Не каталог
21 Является каталогом
22 Неверный аргумент
23 Слишком много открытых файлов в системе
24 Слишком много открытых файлов
25 Неподходящий ioctl для устройства
26 Текстовый файл занят
27 Слишком большой файл
28 На устройстве не осталось свободного места
29 Неправильный поиск
30 Файловая система только для чтения
31 Слишком много ссылок
32 Сломанная труба
33 Числовой аргумент вне области
34 Числовой результат вне диапазона
35 Предотвращение блокировки ресурсов
36 Слишком длинное имя файла
37 Нет доступных блокировок
38 Функция не реализована
39 Каталог не пуст
40 Слишком много уровней символических ссылок
42 Нет сообщения нужного типа
43 Идентификатор удален
44 Номер канала вне диапазона
45 Уровень 2 не синхронизирован
46 Уровень 3 остановлен
47 Уровень 3 сброшен
48 Номер канала вне диапазона
49 Драйвер протокола не подключен
50 Отсутствует структура CSI
51 Уровень 2 остановлен
52 Неверный обмен
53 Неверный дескриптор запроса
54 Обмен переполнен
55 Нет анода
56 Неверный код запроса
57 Неверный слот
59 Плохой формат файла шрифта
60 Устройство не является потоком
61 Нет доступных данных
62 Таймер истек
63 Закончились ресурсы потоков
64 Машина не находится в сети
65 Пакет не установлен
66 Объект удален
67 Связь разорвана
68 Ошибка рекламы
69 Ошибка Srmount
70 Ошибка связи при отправке
71 Ошибка протокола
72 Попытка мультихопа
73 Специфическая ошибка RFS
74 Плохое сообщение
75 Значение слишком велико для определенного типа данных
76 Имя не уникально в сети
77 Дескриптор файла в плохом состоянии
78 Удаленный адрес изменен
79 Не удается получить доступ к необходимой общей библиотеке
80 Доступ к поврежденной общей библиотеке
81 Секция .lib в файле a.out повреждена
82 Попытка подключить слишком много общих библиотек
83 Невозможно выполнить общую библиотеку напрямую
84 Неверный или неполный многобайтовый или широкий символ
85 Прерванный системный вызов должен быть перезапущен
86 Ошибка потоковой трубы
87 Слишком много пользователей
88 Сокетная операция на не сокете
89 Требуется адрес назначения
90 Слишком длинное сообщение
91 Протокол неправильного типа для сокета
92 Протокол недоступен
93 Протокол не поддерживается
94 Тип сокета не поддерживается
95 Операция не поддерживается
96 Семейство протоколов не поддерживается
97 Семейство адресов не поддерживается протоколом
98 Адрес уже используется
99 Невозможно назначить запрашиваемый адрес
100 Сеть не работает
101 Сеть недоступна
102 Сеть разорвала соединение при перезагрузке
103 Программное обеспечение вызвало прерывание соединения
104 Соединение сброшено сверстником
105 Нет доступного буферного пространства
106 Транспортная конечная точка уже подключена
107 Транспортная конечная точка не подключена
108 Невозможно отправить после отключения транспортной конечной точки
109 Слишком много ссылок
110 Соединение прервано по таймеру
111 Отказ в подключении
112 Хост не работает
113 Нет маршрута к хосту
114 Операция уже выполняется
115 Операция находится в процессе выполнения
116 Несвежий файловый хэндл
117 Структура нуждается в очистке
118 Не файл именованного типа XENIX
119 Нет доступных семафоров XENIX
120 Является файлом именованного типа
121 Ошибка удаленного ввода/вывода
122 Превышена дисковая квота
123 Не найден носитель
125 Операция отменена
126 Необходимый ключ недоступен
127 Срок действия ключа истек
128 Ключ был отозван
129 Ключ был отклонен службой
130 Владелец умер
131 Состояние не может быть восстановлено
132 Операция невозможна из-за радиопомех
133 Страница памяти имеет аппаратную ошибку

Команда perror объясняет коды ошибок, которые являются частью пакета MySQL/MariaDB:

Заключение

Эта страница объяснила статус выхода bash и связанные с ним команды. Для получения дополнительной информации смотрите man-страницу оболочки bash здесь.

Avatar for Gnostis
Gnostis
Добавить комментарий