Как узнать Exit Code выполненной команды в Linux?

«Как узнать Exit Code выполненной команды в Linux?» — вопрос из категории Linux, который задают на 23% собеседований Devops Инженер. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Код возврата последней команды хранится в специальной переменной $?. Я постоянно использую это при написании скриптов и отладке в shell.

Базовый пример:

ls /non/existent/path
echo $?
# Выведет 2 (код ошибки "No such file or directory")

Ключевые моменты из моего опыта:

  • $? обновляется после выполнения каждой команды или пайплайна.
  • Код 0 всегда означает успешное завершение. Любое другое число — ошибка.
  • Конкретные значения кодов ошибок зависят от программы. Например, в grep: 0 — найдено, 1 — не найдено, 2 — ошибка.

Использование в скриптах: Я избегаю проверки $? сразу после команды, вместо этого использую условные конструкции напрямую, что надёжнее:

if ping -c 1 google.com &> /dev/null; then
    echo "Host is reachable."
else
    echo "Ping failed with exit code $?"
fi

# Для сложных пайплайнов проверяю код PIPESTATUS
ls | head -n 5 | wc -l
echo "Exit codes: ${PIPESTATUS[@]}"

Это критически важно для автоматизации в CI/CD (например, в Jenkins или GitLab CI), где следующий шаг зависит от успеха предыдущего.