Как установить переменные среды в Bash в Linux

Стилизованный терминал Linux с линиями зеленого текста на ноутбуке.
фатмавати ахмад дзенури / Shutterstock

В Linux существует более одного типа переменных среды. Узнайте, как их увидеть, создать их для локального и удаленного входа и заставить их пережить перезагрузки.

Как работают переменные среды

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

Некоторые переменные среды являются общесистемными или глобальными. Другие в течение сеанса и видны только вам. Другие не могут ссылаться на ваши переменные среды сеанса. В оболочке определен третий набор переменных среды. Ваш языковой стандарт, настройки часового пояса и клавиатуры, набор каталогов, в которых выполняется поиск, когда оболочка пытается найти команду, и ваш редактор по умолчанию, хранятся в переменных среды оболочки.

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

Программы для Windows, мобильные приложения, игры - ВСЁ БЕСПЛАТНО, в нашем закрытом телеграмм канале - Подписывайтесь:)

Среды и Наследование

Когда оболочка запускается, она проходит фазу инициализации. Именно в этот момент он считывает переменные окружения, которые определяют среду оболочки.

Когда программа или команда запускается из этой оболочки, известной как дочерний процесс, она наследует среду родительского процесса, но будьте осторожны! Как мы увидим, вы можете создавать переменные, которые не добавляются в вашу среду, поэтому они не будут наследоваться дочерним процессом.

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

Глобальные переменные среды

По соглашению переменным среды присваиваются имена в верхнем регистре. Вот некоторые из глобальных переменных среды, и что представляют собой значения, которые они содержат:

  • РАКУШКА: Имя оболочки, которая запускается при открытии окна терминала. В большинстве дистрибутивов Linux это будет баш если вы не изменили его по умолчанию.
  • СРОК: Окна терминала на самом деле эмулируют аппаратный терминал. Это содержит тип аппаратного терминала, который будет эмулироваться.
  • USER: Имя пользователя текущего человека, использующего систему.
  • PWD: Путь к текущему рабочему каталогу.
  • OLDPWD: Каталог, в котором вы находились до перехода в текущий рабочий каталог.
  • LS_COLORS: Список цветовых кодов, используемых ls выделить разные типы файлов,
  • MAIL: Если mailНа вашем компьютере Linux установлена ​​система (по умолчанию это не так), она будет содержать путь к почтовому ящику текущего пользователя,
  • ДОРОЖКА: Список каталогов, по которым оболочка будет искать исполняемые файлы команд.
  • LANG: Настройки языка, локализации и кодировки символов.
  • ДОМ: Домашний каталог текущего пользователя.
  • _: Подчеркивание (_) переменная окружения содержит последнюю введенную команду.

СВЯЗАННЫЕ С: Как использовать pushd и popd в Linux

Мы можем видеть, что некоторые из них настроены на использование ничего более сложного, чем echo, который будет записать значения в окно терминала, Чтобы увидеть ценность удерживается переменной среды, вам нужно добавить знак доллара ($) к началу своего названия.

Приятно, что вы можете использовать завершение вкладки заполнить имя переменной среды для вас. Введите несколько букв имени и нажмите Tab. Имя переменной заполняется оболочкой. Если этого не произойдет, вам нужно будет набрать еще несколько букв, чтобы отличить переменную среды от других команд, имена которых начинаются с тех же букв:

echo $SHELL
echo $LANG
echo $HOME
echo $PWD

echo $ SHELL в окне терминала

Чтобы создать свой собственный Глобальный переменные среды, добавьте их в /etc/environment файл. Вам нужно использовать sudo редактировать этот файл:

sudo gedit /etc/environment

sudo gedit / etc / environment в окне терминала

Чтобы добавить переменную среды, введите ее имя, знак равенства (=) и значение, которое вы хотите сохранить в переменной среды. Не ставьте пробел до или после знака равенства (=). Имя переменной окружения может содержать буквы, подчеркивание (_) или цифры. Однако первый символ имени не может быть числом.

Если в значении есть пробелы, убедитесь, что вы заключили все значение в кавычки (").

Файл / etc / environment открывается в редакторе и добавляется новая переменная окружения.

Сохраните файл, а затем выйдите и снова войдите в систему. использование echo чтобы проверить, что новая переменная существует и содержит значение, которое вы установили:

echo $WEBSITE

echo $ WEBSITE в окне терминала.

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

echo $WEBSITE

echo $ WEBSITE в окне терминала.

к увидеть все переменные среды сразу наберите printenv, Выводов много, поэтому есть смысл передать его через sort, а затем в less:

printenv | sort | less

принтенв | сортировать | меньше в окне терминала.

Сортированный список переменных среды отображается для нас в less,

отсортированный список переменных среды в less в терминальном окне.

Мы можем передать вывод через grep искать переменные среды связанные с конкретной темой,

printenv | grep GNOME

принтенв | grep GNOME в окне терминала.

СВЯЗАННЫЕ С: Как редактировать текстовые файлы графически в Linux с помощью gedit

Переменные среды Shell

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

  • BASHOPTS: Параметры командной строки, которые использовались при bash был запущен.
  • BASH_VERSION: bash номер версии в виде строки слов и цифр.
  • BASH_VERSINFO: bash версия в виде цифры.
  • КОЛОННЫ: Текущая ширина окна терминала.
  • DIRSTACK: Каталоги, которые были добавлен в стек каталогов посредством pushd команда.
  • HISTFILESIZE: Максимальное количество линии разрешены в history файл.
  • HISTSIZE: Количество строк history разрешено в памяти.
  • HOSTNAME: Имя хоста компьютера.
  • IFS: Внутренний разделитель полей используется для разделения ввода в командной строке. По умолчанию это пробел.
  • PS1: PS1 Переменная окружения содержит определение основной, командной строки и командной строки. Набор токенов, называемых escape-последовательностями, может быть включен в определение вашей командной строки. Они представляют такие вещи, как имя хоста и пользователя, текущий рабочий каталог и время.
  • PS2: Когда команда занимает более одной строки и ожидается больше ввода, отображается дополнительная командная строка. PS2 Переменная окружения содержит определение этого вторичного приглашения, которое по умолчанию имеет знак больше, чем (>).
  • SHELLOPTS: Параметры оболочки, которые вы можете установить с помощью set вариант.
  • UID: Идентификатор пользователя текущего пользователя.

СВЯЗАННЫЕ С: Как использовать pushd и popd в Linux

Давайте проверим некоторые из этих переменных оболочки:

echo $BASH_VERSION
echo $HOSTNAME
echo $COLUMNS
echo $HISTFILESIZE
echo $UID

эхо $ BASH_VERSION в окне терминала.

Для полноты, вот токены, которые вы можете использовать в определениях командной строки:

  • Т: Текущее время в формате ЧЧ: ММ: СС.
  • D: Текущая дата, выраженная в виде дня недели, месяца, даты.
  • П: Символ новой строки.
  • S: Название вашей оболочки.
  • W: Название вашего текущего рабочего каталога.
  • Ш: Путь к вашему текущему рабочему каталогу.
  • И: Имя пользователя, который вошел в систему.
  • час: Имя хоста компьютера.
  • #: Каждая команда в оболочке пронумерована. Это позволяет увидеть номер команды в командной строке. Это не то же самое, что число, которое будет иметь команда в history список.
  • $: Устанавливает последний символ приглашения в знак доллара ($) для обычного пользователя и хеш-символ (#) для пользователя root. Это работает путем проверки UID пользователя. Если это ноль, пользователь root.

Вы найдете определение вашего PS1 переменная окружения в вашем .bashrc файл.

Создание переменных среды сеанса

Чтобы создать переменные среды для собственного использования, добавьте их в конец .bashrc файл. Если вы хотите, чтобы переменные среды были доступны для удаленных сеансов, таких как SSH-соединения, вам необходимо добавить их в свой .bash_profile файл, а также.

Формат определения переменной среды одинаков для обоих файлов. Чтобы добавить определение к вашему .bash_profile файл, введите это в вашем домашнем каталоге:

gedit .bashrc

Файл .bashrc был помещен в редактор, и в качестве последней строки в файле добавлена ​​новая переменная среды.

Мы добавили переменную окружения INHERITED_VAR, Обратите внимание на слово «экспорт» в начале строки.

Гедит .bashrc в окне терминала.

Сохраните и закройте файл после завершения редактирования. Вы можете выйти и снова войти, или вы можете заставить оболочку перечитать .bash_profile файл с помощью команды точка (.) нравится:

. .bashrc

, .bashrc в окне терминала.

Теперь давайте создадим переменную окружения в командной строке:

LOCAL_VAR="This session only"

LOCAL_VAL =

Если мы используем echoМы видим, что обе переменные окружения доступны для нас:

echo $LOCAL_VAR
echo $INHERITED_VAR

эхо $ LOCAL_VAR в окне терминала.

Вы заметите определение INHERITED_VAR переменная окружения имела слово «экспорт» в начале строки. Это означает, что переменная окружения будет наследоваться дочерними процессами текущей оболочки. Если мы запустим еще один, используя bash Команда, мы можем проверить две переменные из дочерней оболочки:

bash
echo $LOCAL_VAR
echo $INHERITED_VAR

Баш в окне терминала

Как видите, INHERITED_VAR доступен в дочерней оболочке, но LOCAL_VAR не является. Мы просто получаем пустую строку.

Хотя «export» добавляет переменную части среды в среду, которую наследуют дочерние процессы, INHERITED_VAR не является глобальной переменной среды. Например, пользователь mary не могу сослаться на это:

echo $INHERITED_VAR

эхо $ INHERITED_VAR в окне терминала.

Закрыть нашего ребенка bash сеанс мы используем exit:

exit

Унаследованные среды также влияют на сценарии. Вот простой скрипт, который записывает значения наших трех переменных среды в окно терминала:

#!/bin/bash

echo "WEBSITE" $WEBSITE
echo "LOCAL_VAR" $LOCAL_VAR
echo "INHERITED_VAR" $INHERITED_VAR

Это было сохранено в файл с именем envtest.sh, а затем сделал исполняемым со следующим:

chmod +x envtest.sh

Когда мы запускаем скрипт, он может получить доступ к двум из трех переменных окружения:

./envtest.sh

./envtest.sh в окне терминала.

Скрипт может видеть WEBSITE глобальная переменная среды и INHERITED_VAR экспортированная переменная окружения. Не может получить доступ LOCAL_VARдаже если скрипт выполняется в той же оболочке, где была создана переменная.

Если нам нужно, мы можем экспортировать переменную окружения из командной строки. Мы сделаем это с нашими LOCAL_VARи снова запустите скрипт:

export LOCAL_VAR
./envtest.sh

экспортировать LOCAL_VAR в окне терминала.

Переменная окружения была добавлена ​​в среду текущей оболочки, и поэтому она появляется в среде, которая наследуется сценарием. Сценарий также может ссылаться на эту переменную среды.

Удаленные подключения

Глобальные переменные среды доступны для сеансов удаленного входа, но если вы хотите, чтобы локально определенные переменные среды были доступны вам удаленно, вы должны добавить их в свой .bash_profile файл. Вы можете установить ту же переменную среды в .bashrc а также .bash_profile файлы с разными значениями. Это может быть использовано скриптом, скажем, для изменения его поведения для людей, использующих систему локально или удаленно.

(С риском путаницы .profile файл. Он также может содержать определения переменных среды. Однако .profile файл не читается, если .bash_profile файл присутствует. Итак, самое безопасное – и bashсовместимый способ – это использовать .bash_profile файл.)

Для редактирования .bash_profile файл, мы будем использовать gedit снова:

gedit .bash_profile

gedit .bash_profile в окне терминала.

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

Файл .bash_profile открывается в редакторе с добавлением новой переменной среды.

Сохраните ваши изменения и закройте gedit,

На другом компьютере мы сделаем SSH подключение к тестовому компьютеру,

ssh dave@howtogeek.local

ssh dave@howtogeek.local в окне терминала.

Как только мы подключимся, мы снова запустим скрипт:

./envtest.sh

./envtest.sh в окне терминала.

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

Сброс переменной среды

Чтобы сбросить переменную среды, используйте unset команда, Если мы сбросим глобальную переменную среды, WEBSITEи экспортированная переменная среды, INHERITED_VARони больше не будут доступны ни в командной строке, ни в дочерних процессах:

unset WEBSITE
unset INHERITED_VAR
./envtest.sh
echo $WEBSITE

Отключение переменной окружения в Bash в Linux.

Следует отметить, что это только меняет доступность глобальных переменных среды для вас в этом сеансе. Другой человек, который вошел в систему одновременно, все еще сможет получить доступ к своему экземпляру этой глобальной переменной среды. Его экземпляр был инициализирован и прочитан из /etc/environment файл во время процесса входа в систему, и не зависит от чьей-либо копии переменной.

Как пример, пользователь mary все еще может получить доступ к WEBSITE переменная окружения и читать ее значение, даже если пользователь dave имеет unset это в его сессии:

echo $WEBSITE

echo% ВЕБ-САЙТ в окне терминала.

Экологический контроль

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

Программы для Windows, мобильные приложения, игры - ВСЁ БЕСПЛАТНО, в нашем закрытом телеграмм канале - Подписывайтесь:)

Похожие записи

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *