Какие exit-коды в Linux вы знаете и как их использовать?

Ответ

Exit-коды (коды возврата) — это стандартный механизм в Linux для передачи результата выполнения процесса. Я активно использую их в скриптах автоматизации и CI/CD пайплайнах для контроля потока выполнения.

Основные коды и их значение:

  • 0: Успешное завершение. Это сигнал для следующей команды в пайплайне (&&) о том, что можно продолжать.
  • 1: Общая ошибка или неуспешное завершение (например, сбой в пользовательском скрипте).
  • 2: Неправильное использование встроенной команды shell (например, неверный аргумент).
  • 126: Команда найдена, но не является исполняемой (проблема с правами chmod +x).
  • 127: Команда не найдена (command not found).
  • 130 (128+2): Процесс завершен сигналом SIGINT (обычно Ctrl+C).
  • 137 (128+9): Процесс принудительно убит сигналом SIGKILL (kill -9).
  • 143 (128+15): Процесс корректно завершен сигналом SIGTERM (стандартный сигнал kill).

Практическое использование в скриптах:

#!/bin/bash
# Пример скрипта деплоя с проверкой кодов возврата

echo "Запуск сборки..."
if ! docker build -t myapp:latest .; then
    echo "[ERROR] Сборка Docker-образа завершилась с кодом $?. Прерывание."
    exit 1 # Возвращаем свой код ошибки для пайплайна
fi

echo "Пуш образа в registry..."
docker push myapp:latest
# Если push упадет, его exit code !=0 прервет скрипт из-за настроенного 'set -e'

echo "[SUCCESS] Все шаги выполнены."
exit 0

В CI/CD (например, GitLab CI) проверка $? позволяет реализовать сложную логику: продолжить при определенных ошибках или остановить пайплайн.

Ответ 18+ 🔞

Э, слушай, давай разжую про эти exit-коды, а то народ часто нихуя не понимает, а это ж основа основ! Представь, что каждая команда в линуксе — это работяга, который, закончив дело, должен тебе крикнуть в спину: «Всё, я сделал!» или «Бля, тут косяк!». Вот этот крик — и есть exit-код, цифра, которую процесс отдаёт системе перед тем, как накрыться медным тазом.

Основные цифры, которые надо знать в лицо:

  • 0: Всё заебись, работа сделана. Это священная цифра. Если скрипт видит 0, он такой: «О, красава, можно дальше работать». В пайплайне с && это зелёный свет.
  • 1: Общая ошибка. Что-то пошло не так, но что именно — хрен его знает. Чаще всего это твой собственный скрипт, который упал с криком «ёпта, я не могу!».
  • 2: Кривые руки у того, кто команду вызывает. Неправильно использовал встроенную команду шелла, аргументы не те передал. Шелл сам возмущается.
  • 126: Нашёл файл, а запустить не может. Классика — забыл сделать chmod +x. Права, блядь, где права?!
  • 127: Вообще нихуя не нашёл. command not found в чистом виде. Искал-искал — и ушёл в запой.
  • 130 (128+2): Процессу нажали Ctrl+C. Он вежливо попрощался сигналом SIGINT.
  • 137 (128+9): Жестокое убийство. Его пристрелили командой kill -9 (SIGKILL). Сопротивляться бесполезно.
  • 143 (128+15): Вежливая просьба умереть. Отправили SIGTERM (просто kill), и процесс согласился.

А теперь, блядь, как это использовать в жизни, чтобы не быть распиздяем:

Вот смотри, реальный скрипт деплоя. Тут без проверок — просто пиздец, а не автоматизация.

#!/bin/bash
# Пример скрипта деплоя с проверкой кодов возврата

echo "Запуск сборки..."
if ! docker build -t myapp:latest .; then
    echo "[ERROR] Сборка Docker-образа завершилась с кодом $?. Прерывание."
    exit 1 # Возвращаем свой код ошибки для пайплайна
fi

echo "Пуш образа в registry..."
docker push myapp:latest
# Если push упадет, его exit code !=0 прервет скрипт из-за настроенного 'set -e'

echo "[SUCCESS] Все шаги выполнены."
exit 0

Смысл в чём? Если docker build свалится и вернёт любую цифру, кроме нуля, мы это ловим, орем в лог с этим самым кодом ($? — волшебная переменная с кодом последней команды) и сами выходим с кодом 1. Это сигнал для CI/CD системы: «Чувак, тут всё пошло по пизде, дальше не продолжать». А если в начале скрипта стоит set -e, то он сам прервётся на первой же команде с ошибкой, что тоже часто удобно, чтобы не делать кучу проверок.

В общем, exit-коды — это не какая-то академическая хуйня, а реальный инструмент, чтобы твои скрипты не превращались в маньяка, который продолжает деплоить в прод, когда уже всё сломалось на первом шагу. Доверия ебать ноль к слепому выполнению, всегда проверяй, что тебе накричали в спину!