[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"question-rabota-v-cli-bash-chto-takoe-exit-codes-i-kak-s-nimi-rabotat":3},{"id":4,"slug":5,"topicId":6,"topicSlug":7,"topicName":8,"topicEmoji":9,"question":10,"answer":11,"codeLang":12,"codeSrc":12,"important":12,"commonMistakes":12,"modernUsage":12,"difficulty":13,"tags":14,"related":18,"progress":19,"seo":20},163,"chto-takoe-exit-codes-i-kak-s-nimi-rabotat",4,"rabota-v-cli-bash","Работа в CLI (Bash)","💻","Что такое exit codes и как с ними работать?","**Exit code (код возврата)** — целое число от 0 до 255, которое каждый процесс возвращает операционной системе при завершении. Это стандартный механизм сообщения об успешности выполнения: 0 означает успех, любое другое значение — ошибку.\n\nАналогия: exit code — это как ответ курьера: «доставлено» (0) или код причины недоставки (1 — адрес не найден, 2 — получатель отказался и т. д.).\n\n### Стандартные коды\n\n| Код | Значение |\n|---|---|\n| `0` | Успешное выполнение |\n| `1` | Общая ошибка |\n| `2` | Неправильное использование команды (некорректные аргументы) |\n| `126` | Файл найден, но не является исполняемым |\n| `127` | Команда не найдена |\n| `128+N` | Процесс завершён сигналом N (например, 137 = 128 + 9 = SIGKILL) |\n| `130` | Прервано по Ctrl+C (128 + 2 = SIGINT) |\n\n### Проверка exit code\n\n```bash\n# $? — код возврата последней команды\nls \u002Ftmp\necho $?           # 0 (успех)\n\nls \u002Fnonexistent\necho $?           # 2 (ошибка)\n\n# Использование в условиях (if проверяет exit code команды)\nif grep -q \"ERROR\" app.log; then\n    echo \"Errors found!\"\nfi\n# grep возвращает 0, если нашёл совпадение, и 1, если нет\n\n# Логические операторы\ncommand1 && command2       # command2 выполнится только если command1 вернула 0\ncommand1 || command2       # command2 выполнится только если command1 НЕ вернула 0\n\n# Практический пример\nmvn clean package && echo \"Build OK\" || echo \"Build FAILED\"\n```\n\n### set -e — прерывание при ошибке\n\n```bash\n#!\u002Fbin\u002Fbash\nset -e           # Скрипт завершится при первой ошибке (exit code != 0)\n\necho \"Step 1\"\nfalse            # exit code 1 → скрипт остановится здесь\necho \"Step 2\"   # Не выполнится\n```\n\n### set -o pipefail — ошибки в пайпах\n\n```bash\n#!\u002Fbin\u002Fbash\n# Без pipefail: exit code пайпа = exit code ПОСЛЕДНЕЙ команды\nfalse | true\necho $?          # 0 (ошибка false потеряна!)\n\n# С pipefail: exit code пайпа = код первой ошибочной команды\nset -o pipefail\nfalse | true\necho $?          # 1 (ошибка false обнаружена)\n```\n\n### set -u — ошибка при неопределённых переменных\n\n```bash\n#!\u002Fbin\u002Fbash\nset -u\necho $UNDEFINED_VAR   # Скрипт завершится с ошибкой вместо подстановки пустой строки\n```\n\n### Рекомендуемый шаблон для скриптов\n\n```bash\n#!\u002Fbin\u002Fbash\nset -euo pipefail    # Строгий режим: все три флага вместе\n\n# -e  — остановка при ошибке\n# -u  — ошибка при неопределённой переменной\n# -o pipefail — ошибки в пайпах не игнорируются\n```\n\n### Возврат exit code из скрипта\n\n```bash\n#!\u002Fbin\u002Fbash\nif [ $# -eq 0 ]; then\n    echo \"No arguments provided\" >&2    # Ошибки в stderr\n    exit 1\nfi\n\nprocess_data \"$1\"\nexit 0     # Явный успешный возврат (необязательно — по умолчанию код последней команды)\n```\n\n> **На собеседовании:** ключевое — знать, что 0 = успех, не-0 = ошибка, и уметь объяснить `set -euo pipefail`. Частый вопрос: «процесс завершился с кодом 137 — что произошло?» — ответ: 128 + 9 = SIGKILL, процесс был принудительно убит (часто OOM Killer в Linux).\n\n---","","junior",[15,16,17],"scripting","linux","bash",[],null,{"title":21,"description":22,"ogTitle":21,"ogDescription":23,"keywords":24,"schemaAnswer":33,"featuredSnippetReady":34},"Exit codes в bash: коды возврата, set -euo pipefail -- Gymterview","Что такое exit codes и как с ними работать? Коды возврата 0-255, $?, логические операторы &&\u002F||, set -e, set -u, set -o pipefail и строгий режим скриптов.","Полный разбор exit codes: соглашения о кодах возврата, проверка через $?, set -euo pipefail для строгого режима скриптов.",[25,26,27,28,29,30,31,32],"exit code","код возврата","set -e","set -u","pipefail","$?","bash ошибки","строгий режим bash","Exit code -- целое число 0-255, возвращаемое процессом при завершении. 0 означает успех, 1 -- общую ошибку, 2 -- неправильное использование, 126 -- файл не исполняемый, 127 -- команда не найдена, 128+N -- завершение сигналом (137 = SIGKILL, 130 = SIGINT). Код последней команды доступен через $?. Операторы && и || позволяют строить цепочки по результату. Рекомендуемый шаблон для скриптов: set -euo pipefail -- set -e останавливает при ошибке, set -u -- при неопределённой переменной, set -o pipefail -- учитывает ошибки в пайпах.",true]