[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"question-rabota-v-cli-bash-chto-takoe-peremennye-okruzheniya-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},159,"chto-takoe-peremennye-okruzheniya-i-kak-s-nimi-rabotat",4,"rabota-v-cli-bash","Работа в CLI (Bash)","💻","Что такое переменные окружения и как с ними работать?","**Переменные окружения** — это именованные значения (пары ключ=значение), которые доступны процессу и передаются всем его дочерним процессам. Они используются для конфигурации программ без изменения кода.\n\n### Аналогия\n\nПеременные окружения — как табличка на двери офиса: любой, кто заходит (дочерний процесс), видит информацию (имя отдела, номер телефона). Локальные переменные — это записка на вашем рабочем столе, видная только вам.\n\n### Основные системные переменные\n\n| Переменная | Описание |\n|---|---|\n| `PATH` | Список директорий для поиска исполняемых файлов (разделитель `:`) |\n| `HOME` | Домашняя директория пользователя |\n| `USER` | Имя текущего пользователя |\n| `SHELL` | Путь к текущей оболочке |\n| `PWD` | Текущая рабочая директория |\n| `LANG` | Локаль (язык и кодировка) |\n| `JAVA_HOME` | Путь к JDK (важно для Java-разработчика) |\n| `EDITOR` | Текстовый редактор по умолчанию |\n\n### Просмотр переменных\n\n```bash\necho $HOME                       # Значение конкретной переменной\necho $PATH                       # Вывести PATH\nenv                              # Все переменные окружения\nprintenv                         # Аналог env\nprintenv PATH                    # Конкретная переменная через printenv\nset                              # Все переменные (включая локальные)\n```\n\n### Создание и экспорт переменных\n\n```bash\n# Локальная переменная (доступна только в текущем shell)\nMY_VAR=\"hello\"\necho $MY_VAR\n\n# Экспорт (доступна дочерним процессам)\nexport MY_VAR=\"hello\"\n\n# Создание и экспорт одной строкой\nexport JAVA_HOME=\u002Fusr\u002Flib\u002Fjvm\u002Fjava-17\n\n# Добавить путь в PATH\nexport PATH=$PATH:\u002Fopt\u002Fmaven\u002Fbin\n\n# Удалить переменную\nunset MY_VAR\n\n# Установить переменную только для одной команды\nSPRING_PROFILES_ACTIVE=dev java -jar app.jar\n```\n\n### Подстановка переменных\n\n```bash\necho \"Home: $HOME\"               # Подстановка в двойных кавычках\necho 'Home: $HOME'               # Одинарные кавычки — нет подстановки!\necho \"Java: ${JAVA_HOME}\u002Fbin\"    # Фигурные скобки для явного отделения имени\necho \"${VAR:-default}\"           # Значение по умолчанию, если VAR не задана\necho \"${VAR:=default}\"           # Установить default, если VAR не задана\necho \"${#VAR}\"                   # Длина значения переменной\n```\n\n### Постоянное сохранение переменных\n\n```bash\n# Добавить в ~\u002F.bashrc (для bash) или ~\u002F.zshrc (для zsh):\necho 'export JAVA_HOME=\u002Fusr\u002Flib\u002Fjvm\u002Fjava-17' >> ~\u002F.bashrc\necho 'export PATH=$PATH:$JAVA_HOME\u002Fbin' >> ~\u002F.bashrc\n\n# Применить изменения без перезапуска терминала\nsource ~\u002F.bashrc\n# или\n. ~\u002F.bashrc\n```\n\n> **На собеседовании:** интервьюер хочет услышать разницу между локальной переменной (`VAR=value`) и экспортированной (`export VAR=value`), а также понимание `PATH`. Частая ошибка — ставить пробелы вокруг `=` при присваивании (`VAR = value` — это вызов команды `VAR` с аргументами `=` и `value`).","","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]