В системах на основе Linux и Unix переменные среды представляют собой набор динамических именованных значений, которые хранятся в системе и используются приложениями, запускаемыми в оболочках или подоболочках. Проще говоря, переменная окружения – это переменная с именем и связанным значением.
Переменные среды позволяют вам настроить работу системы и поведение приложений в системе. Например, переменная окружения может хранить информацию о текстовом редакторе или браузере по умолчанию, пути к исполняемым файлам или настройке локали системы и раскладки клавиатуры.
В этой статье мы объясним, как читать и устанавливать переменные окружения и оболочки.
Переменные имеют следующий формат:
KEY=value KEY="Другое значение" KEY=value1:value2
Переменные можно классифицировать на две основные категории: переменные среды и переменные оболочки.
Переменные среды – это переменные, которые доступны для всей системы и наследуются всеми порожденными дочерними процессами и оболочками.
Переменные оболочки – это переменные, которые применяются только к текущему экземпляру оболочки. Каждая оболочка, такая как zsh и bash, имеет свой собственный набор внутренних переменных оболочки.
Есть несколько доступных команд, которые позволяют вам перечислять и устанавливать переменные среды в Linux:
Наиболее используемой командой для отображения переменных среды является printenv. Если имя переменной передается в качестве аргумента команды, отображается только значение этой переменной. Если аргумент не указан, printenv печатается список всех переменных среды, по одной переменной на строку.
Например, для отображения значения HOMEпеременной среды вы должны выполнить:
printenv HOME
Выходные данные выведут путь текущего пользователя, вошедшего в систему:
/home/AndreyEx
Вы также можете передать в команду printenv более одного аргумента :
printenv LANG PWD
en_US /home/AndreyEx
Если вы запустите команду printenvor env без аргументов, она покажет список всех переменных среды:
printenv
Вывод будет выглядеть примерно так:
LS_COLORS=rs=0:di=01;34:ln=01;36:mh=00:pi=40;33:so=01;35;... LESSCLOSE=/usr/bin/lesspipe %s %s LANG=en_US S_COLORS=auto XDG_SESSION_ID=5 USER=AndreyEx PWD=/home/AndreyEx HOME=/home/AndreyEx SSH_CLIENT=192.168.121.1 34422 22 XDG_DATA_DIRS=/usr/local/share:/usr/share:/var/lib/snapd/desktop SSH_TTY=/dev/pts/0 MAIL=/var/mail/AndreyEx TERM=xterm-256color SHELL=/bin/bash SHLVL=1 LANGUAGE=en_US: LOGNAME=AndreyEx XDG_RUNTIME_DIR=/run/user/1000 PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin LESSOPEN=| /usr/bin/lesspipe %s _=/usr/bin/printenv
Ниже приведены некоторые из наиболее распространенных переменных среды:
Команды printenv и env печатают только переменные окружения. Если вы хотите получить список всех переменных, включая окружение, оболочку и переменные, а также функции оболочки, вы можете использовать setкоманду:
set
BASH=/bin/bash BASHOPTS=checkwinsize:cmdhist:complete_fullquote:expand_aliases:extglob:extquote:force_fignore:histappend:interactive_comments:login_shell:progcomp:promptvars:sourcepath BASH_ALIASES=() BASH_ARGC=() BASH_ARGV=()
Команда отобразит большой список всех переменных, поэтому вы, вероятно, захотите направить вывод в команду less.
set | less
Вы также можете использовать echoдля печати переменной оболочки. Например, чтобы напечатать значение переменной BASH_VERSION, которую вы запустите:
echo $BASH_VERSION
4.4.19(1)-release
Чтобы лучше проиллюстрировать разницу между переменными Shell и Environment, мы начнем с установки переменных Shell, а затем перейдем к переменным Environment.
MY_VAR='AndreyEx'
Вы можете проверить, что переменная установлена, используя любой echo $MY_VAR из фильтров вывода команды set с помощью grep set | grep MY_VAR :
echo $MY_VAR
AndreyEx
Используйте команду printenv, чтобы проверить, является ли эта переменная переменной среды или нет:
printenv MY_VAR
Вывод будет пустым, что говорит о том, что переменная не является переменной окружения.
Вы также можете попробовать напечатать переменную в под-оболочке, и вы получите пустой вывод.
bash -c 'echo $MY_VAR'
Команда exportиспользуется для установки переменных окружения.
Чтобы создать переменную среды, просто экспортируйте переменную оболочки как переменную среды:
export MY_VAR
Вы можете проверить это, запустив:
printenv MY_VAR
AndreyEx
Если вы попытаетесь напечатать переменную в подоболочке на этот раз, вы получите имя переменной, напечатанное на вашем терминале:
bash -c 'echo $MY_VAR'
AndreyEx
Вы также можете установить переменные среды в одну строку:
export MY_NEW_VAR="Моя новая переменная"
Переменные среды, созданные таким образом, доступны только в текущем сеансе. Если вы откроете новую оболочку или выйдете из системы, все переменные будут потеряны.
Чтобы сделать переменные окружения постоянными, вам нужно определить эти переменные в файлах конфигурации bash. В большинстве дистрибутивов Linux при запуске нового сеанса переменные среды считываются из следующих файлов:
FOO=barVAR_TEST="Тестовая переменная"
export JAVA_HOME="/path/to/java/home"export PATH=$PATH:$JAVA_HOME/bin
export PATH="$HOME/bin:$PATH"
Чтобы загрузить новые переменные среды в текущий сеанс оболочки, используйте команду source:
source ~/.bashrc
В этой статье мы показали, как устанавливать и перечислять переменные окружения и оболочки.
Не стесняйтесь оставлять комментарии, если у вас есть какие-либо вопросы.