env (окружение)
100%

Text-Fu · Урок 5

env (окружение)

Узнайте, как Bash раскрывает, экспортирует, проверяет и временно переопределяет переменные окружения.

У каждого процесса есть окружение — набор строк вида «имя — значение», унаследованный от родительского процесса. Оболочки используют переменные окружения, чтобы передавать запускаемым программам настройки вроде языка и путей поиска исполняемых файлов.

Раскрытие значений переменных в Bash

Перед запуском команды Bash заменяет $NAME или ${NAME} значением переменной. Заключайте подстановку в кавычки, чтобы сохранить значение как один аргумент:

$ printf '%s\n' "$HOME"
/home/pete

К распространённым переменным окружения относятся:

  • HOME: путь к домашнему каталогу текущего пользователя.
  • USER: имя пользователя, предоставляемое средой входа во многих системах.
  • PWD: текущий рабочий каталог оболочки.
  • PATH: каталоги, в которых выполняется поиск команд.

Значения зависят от окружения текущего процесса и не являются универсальными константами. Неустановленная переменная раскрывается в пустую строку, если не включено более строгое поведение оболочки.

Какая команда Bash выводит значение HOME, сохраняя его как один аргумент?

Проверка текущего окружения

Запустите env без операндов, чтобы вывести окружение, унаследованное процессом env:

$ env

Вывод содержит записи NAME=value, например:

PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/bin
PWD=/home/user
USER=pete

Переменные окружения могут содержать учётные данные, токены, внутренние пути и другую конфиденциальную информацию. Не публикуйте полный вывод env в открытых задачах или журналах, не проверив и не скрыв такие данные.

Какая команда выводит окружение, видимое новому запущенному процессу?

Поиск команд через PATH

PATH — разделённый двоеточиями список каталогов, в которых Bash ищет команду, если её имя не содержит косой черты:

$ printf '%s\n' "$PATH"

Порядок важен: Bash использует первую подходящую команду согласно своим правилам разрешения имён. Чтобы проверить, как текущая оболочка разрешает имя, выполните type -a NAME.

Чтобы добавить /opt/coolapp/bin для текущей оболочки и её будущих дочерних процессов, сохранив существующий путь поиска:

$ export PATH="/opt/coolapp/bin:$PATH"

Не заменяйте PATH случайно единственным новым каталогом и не добавляйте каталоги, доступные для записи ненадёжным пользователям. Первая ошибка может помешать находить обычные команды, а вторая — привести к запуску неожиданного исполняемого файла.

Какая команда добавляет /opt/coolapp/bin перед существующим PATH для текущего процесса Bash и его будущих дочерних процессов?

Экспорт переменной в дочерние процессы

Переменные Bash не включаются автоматически в окружение дочерних процессов. Пометьте имя для экспорта командой export:

$ export TEST=test

Теперь текущий процесс Bash содержит переменную TEST, а запускаемые им команды наследуют TEST=test. Дочерний процесс не может с помощью этого механизма изменить окружение родителя.

$ printenv TEST
test

Обычно присваивание действует, пока вы не удалите переменную или не завершите оболочку. Оно не изменяет общесистемное окружение.

Каков основной эффект export TEST=test в Bash?

Значение для одной команды

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

$ LANG=C sort names.txt

Значение LANG в текущей оболочке не изменяется навсегда. Утилита env предоставляет другую явную форму:

$ env LANG=C sort names.txt

Используйте env -i COMMAND, чтобы запустить команду с изначально пустым окружением, а затем добавьте необходимые присваивания. Многие программы зависят от значений окружения, поэтому применяйте этот параметр осознанно.

Какая команда запускает sort names.txt с LANG=C, не изменяя LANG текущей оболочки навсегда?

Загрузка личных значений в будущих сеансах

Чтобы воссоздавать экспортированную переменную в будущих интерактивных сеансах Bash, добавьте подходящую строку export в файл запуска, который действительно читают эти сеансы; для интерактивного Bash без входа это обычно ~/.bashrc:

export TEST=test

Zsh обычно использует ~/.zshrc, а Fish — другой синтаксис и конфигурацию. Оболочки входа и неинтерактивные оболочки могут читать другие файлы, поэтому определяйте тип оболочки и сеанса, а не считайте, что один файл настраивает каждый процесс.

Чтобы попрактиковаться с наследованием окружения и настройкой оболочки, выполните лабораторные работы:

  1. Управление окружением и конфигурацией оболочки Linux — потренируйтесь создавать локальные переменные и переменные окружения, разбираться в наследовании и сохранять настройки через .bashrc.
  2. Переменные окружения в Linux — изучите назначение переменных окружения, их создание, изменение и управление ими, а также их роль в конфигурации системы.

Урок завершён

Вы завершили env (окружение)

Теперь вы можете проверять и управлять окружением, которое Bash передаёт дочерним процессам.

  • Раскрывайте значения переменных с осознанным использованием кавычек.

  • Проверяйте экспортированные значения, не раскрывая секреты.

  • Сохраняйте и правильно упорядочивайте каталоги команд в PATH.

  • Экспортируйте переменную оболочки для будущих дочерних процессов.

  • Переопределяйте значение для одной команды, не изменяя родительскую оболочку.

Сохраните прогресс

Создайте бесплатный аккаунт, чтобы сохранить этот урок и продолжить на любом устройстве.

Создать бесплатный аккаунт
Следующий Урок
Назад к Text-Fu