Ответ
Код возврата последней команды хранится в специальной переменной $?. Я постоянно использую это при написании скриптов и отладке в 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), где следующий шаг зависит от успеха предыдущего.