Переменные окружения Linux вместе с переменными оболочки — то, что определяет настройки в рамках пользовательской сессии.
Они загружаются автоматически, но могут быть переопределены. Окружение создается каждый раз при логине в систему.
Переменные окружения Linux, переменные оболочки
Переменные окружения используются для процесса пользовательского shell и всех порождаемые в нем дочерних процессах.
Переменные оболочки содержат данные, которые определяют состояние текущей сессии. Например, текущая директория.
В каждой сессии используются и переменные окружения, и переменные оболочки.
Список переменных окружения можно посмотреть выполнив printenv или env
env
…[skipped]…
LC_MEASUREMENT=ru_RU.UTF-8
LESSCLOSE=/usr/bin/lesspipe %s %s
LC_PAPER=ru_RU.UTF-8
LC_MONETARY=ru_RU.UTF-8
LANG=en_US.UTF-8
…[skipped]…
Разница в том, что printenv позволяет выводить данные по определенной переменной — например:
printenv SHELL
Преимущество env в том, что появляется возможность передать переменную определенной команде
Например:
env SHELL=»/bin/bash» ls -la /opt
Просмотреть переменные среды
set
BASH=/bin/bash
BASHOPTS=checkwinsize:cmdhist:complete_fullquote:expand_aliases:extglob:extquote:force_fignore:histappend:interactive_comments:progcomp:promptvars:sourcepath
BASH_ALIASES=()
BASH_ARGC=()
…[skipped]…
Вывод можно перенаправить в less, чтобы в нем удобнее было ориентироваться
set | less
Чтобы не изменяя текущее окружение избавиться от лишней информации в выводе можно сделать так
(set -o posix; set)
В POSIX режиме не будут выводиться заданные bash функции
Самые часто используемые переменные:
- SHELL — оболчка, которая интерпретирует команды
- USER — пользователь
- PWD — текущий каталог
- TERM — тип, терминала, который эмулируется
Команды в оболочке позволяют менять значение переменных. Так pwd выводит в консоль текущую директорию
[email protected]:~$ pwd
/home/admin
Это переменная оболочки PWD
[email protected]:~$ set | grep PWD
OLDPWD=/tmp
PWD=/home/admin
Перейдем в /tmp и посмотрим как изменится значение
[email protected]:~$ cd /tmp/
[email protected]:/tmp$ set | grep PWD
OLDPWD=/home/admin
PWD=/tmp
Можно увидеть при смене каталога просто меняется значение переменной shell-а PWD, также изменяется и OLDPWD
Как установить переменную окружения или оболчки
Переменная оболочки добавляется следующим образом
SOMEVAR=»Hi there»
set | grep SOMEVAR
SOMEVAR='Hi there'
В выводе env ее не будет, потому, что это переменная именно shell, а не окружения
env | grep SOMEVAR
Просмотреть содержимое можно через echo добавив знак $ перед именем
echo $SOMEVAR
Hi there
Чтобы переменную добавить в окружение ее нужно экспортировоать
export SOMEVAR=»Hi there»
env | grep SOMEVAR
SOMEVAR=Hi there
После этого значение будет наследоваться дочерними процессами.
Удалить переменную окружения можно той же командой export с ключем -n
export -n SOMEVAR
Из оболочки значение удаляется unset
unset SOMEVAR
Автоматическая загрузка переменных при логине
Linux системы используют файлы ~/.bashrc, ~/.bash_profile, ~/.bash_login или ~/.profile для определение переменных. Файлы считываются при логине, какой из них используется зависит от дистрибутива.
В Ubuntu/Debain это ~/.bashrc. В него добавляются как переменные окружения, так и переменные оболочки.
Самым первым считывается /etc/profile. В нем задано и может быть переопределено какие файлы и в каком порядке использовать дальше.
Для non-login сессии переменные задаются в /etc/bash.bashrc. Такая сессия свойственна для скриптов, запускаемых в фоне.
Для большинства задач достаточно отредактировать ~/.bashrc.