В системах на основе Linux и Unix переменные среды представляют собой набор динамических именованных значений, хранящихся в системе, которые используются приложениями, запускаемыми в оболочках или подоболочках. Проще говоря, переменная среды — это переменная с именем и связанным значением.
Переменные среды позволяют настраивать работу системы и поведение приложений в системе. Например, переменная среды может хранить информацию о текстовом редакторе или браузере по умолчанию, пути к исполняемым файлам или настройках языкового стандарта и раскладки клавиатуры.
В этом руководстве мы объясним, как читать и устанавливать переменные среды и оболочки.
Переменные среды и переменные оболочки
Переменные имеют следующий формат:
KEY=value KEY=»Some other value» KEY=value1:value2
- Имена переменных чувствительны к регистру. По соглашению, переменные среды должны иметь имена в ВЕРХНЕМ РЕГИСТРЕ.
- При присвоении переменной нескольких значений они должны быть разделены двоеточием : символ.
- Вокруг символа равенства = нет пробела.
Переменные можно разделить на две основные категории: переменные среды и переменные оболочки.
2.1 Переменные окружения | Linux для начинающих
Переменные среды — это переменные, доступные для всей системы и наследуемые всеми порожденными дочерними процессами и оболочками.
Переменные оболочки — это переменные, которые применяются только к текущему экземпляру оболочки. Каждая оболочка, такая как zsh и bash , имеет собственный набор внутренних переменных оболочки.
Доступно несколько команд, которые позволяют вам перечислять и устанавливать переменные среды в Linux:
- env — команда позволяет запускать другую программу в настраиваемой среде без изменения текущей. При использовании без аргумента он распечатает список текущих переменных среды.
- printenv — команда печатает все или указанные переменные среды.
- set — Команда устанавливает или отменяет переменные оболочки. При использовании без аргумента он распечатает список всех переменных, включая переменные среды и оболочки, а также функции оболочки.
- unset — команда удаляет переменные оболочки и среды.
- export — команда устанавливает переменные среды.
Список переменных среды
Наиболее часто используемая команда для отображения переменных среды — это printenv . Если имя переменной передается в качестве аргумента команде, отображается только значение этой переменной. Если аргумент не указан, printenv печатает список всех переменных среды, по одной переменной в каждой строке.
Например, чтобы отобразить значение переменной среды HOME вы должны запустить:
printenv HOME
На выходе будет напечатан путь текущего пользователя, вошедшего в систему:
/home/linuxize
Вы также можете передать команде printenv более одного аргумента:
printenv LANG PWD
en_US /home/linuxize
Если вы запустите команду printenv или env без аргументов, она покажет список всех переменных среды:
Научись Linux: переменные окружения (эпизод 10)
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=linuxize PWD=/home/linuxize HOME=/home/linuxize 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/linuxize TERM=xterm-256color SHELL=/bin/bash SHLVL=1 LANGUAGE=en_US: LOGNAME=linuxize 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
Ниже приведены некоторые из наиболее распространенных переменных среды:
- USER — текущий авторизованный пользователь.
- HOME — домашний каталог текущего пользователя.
- EDITOR — используемый по умолчанию редактор файлов. Это редактор, который будет использоваться при вводе edit в терминале.
- SHELL — путь к оболочке текущего пользователя, например bash или zsh.
- LOGNAME — имя текущего пользователя.
- PATH — список каталогов, в которых будет производиться поиск при выполнении команд. Когда вы запускаете команду, система будет искать в этих каталогах в указанном порядке и использовать первый найденный исполняемый файл.
- LANG — текущие настройки локали.
- TERM — текущая эмуляция терминала.
- MAIL — Местоположение, где хранится почта текущего пользователя.
Команды printenv и env выводят только переменные среды. Если вы хотите получить список всех переменных, включая среду, оболочку, переменные и функции оболочки, вы можете использовать команду 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
Установка переменных среды
Чтобы лучше проиллюстрировать разницу между переменными оболочки и среды, мы начнем с установки переменных оболочки, а затем перейдем к переменным среды.
Чтобы создать новую переменную оболочки с именем MY_VAR и значением Linuxize просто введите:
MY_VAR=’Linuxize’
Вы можете проверить, что переменная установлена, используя либо echo $MY_VAR либо фильтруя вывод команды set с помощью grep set | grep MY_VAR :
echo $MY_VAR
Linuxize
Используйте команду printenv чтобы проверить, является ли эта переменная переменной среды или нет:
printenv MY_VAR
Вывод будет пустым, что говорит нам, что переменная не является переменной среды.
Вы также можете попробовать напечатать переменную во вспомогательной оболочке, и вы получите пустой результат.
bash -c ‘echo $MY_VAR’
Команда export используется для установки переменных среды.
Чтобы создать переменную среды, просто экспортируйте переменную оболочки как переменную среды:
export MY_VAR
Вы можете проверить это, запустив:
printenv MY_VAR
Linuxize
Если вы попытаетесь напечатать переменную во вспомогательной оболочке, на этот раз вы получите имя переменной, напечатанное на вашем терминале:
bash -c ‘echo $MY_VAR’
Linuxize
Вы также можете установить переменные среды в одной строке:
export MY_NEW_VAR=»My New Var»
Созданные таким образом переменные среды доступны только в текущем сеансе. Если вы откроете новую оболочку или выйдете из системы, все переменные будут потеряны.
Постоянные переменные среды
Чтобы сделать переменные среды постоянными, вам необходимо определить эти переменные в файлах конфигурации bash. В большинстве дистрибутивов Linux при запуске нового сеанса переменные среды считываются из следующих файлов:
-
/etc/environment — используйте этот файл для настройки общесистемных переменных среды. Переменные в этом файле задаются в следующем формате:
FOO=bar VAR_TEST=»Test Var»
export JAVA_HOME=»/path/to/java/home» export PATH=$PATH:$JAVA_HOME/bin
export PATH=»$HOME/bin:$PATH»
Чтобы загрузить новые переменные среды в текущий сеанс оболочки, используйте source команду:
source ~/.bashrc
Выводы
В этом руководстве мы показали вам, как устанавливать и перечислять переменные среды и оболочки.
Не стесняйтесь оставлять комментарии, если у вас есть вопросы.
Источник: routerus.com
Переменные окружения в Linux
Переменные окружения в Linux — это специальные переменные, определенные оболочкой и используемые программами во время выполнения. Они могут определяться системой и пользователем. Системные переменные окружения Linux определяются системой и используются программами системного уровня.
Например, команда PWD использует системную переменную, чтобы сохранять прежнюю рабочую директорию. Пользовательские переменные окружения устанавливаются пользователем, для текущей оболочки, временно или постоянно. Вся концепция добавления и удаления переменных оболочки крутится вокруг нескольких файлов, команд и различных оболочек.
Виды переменных окружения
Если смотреть более широко, переменная окружения может быть трех типов:
1. Локальные переменные окружения
Эти переменные определены только для текущей сессии. Они будут безвозвратно стерты после завершения сессии, будь то удаленный доступ или эмулятор терминала. Они не хранятся ни в каких файлах, а создаются и удаляются с помощью специальных команд.
2. Пользовательские переменные оболочки
Эти переменные оболочки в Linux определяются для конкретного пользователя и загружаются каждый раз когда он входит в систему при помощи локального терминала, или же подключается удаленно. Такие переменные, как правило, хранятся в файлах конфигурации: .bashrc, .bash_profile, .bash_login, .profile или в других файлах, размещенных в директории пользователя.
3. Системные переменные окружения
Эти переменные доступны во всей системе, для всех пользователей. Они загружаются при старте системы из системных файлов конфигурации: /etc/environment, /etc/profile, /etc/profile.d/ /etc/bash.bashrc.
Конфигурационные файлы переменных окружения Linux
Здесь мы кратко рассмотрим различные конфигурационные файлы, перечисленные выше, которые используются для настройки переменных окружения для всей системы или конкретного пользователя.
.bashrc
Это файл переменных конкретного пользователя. Загружается каждый раз, когда пользователь создает терминальный сеанс, то есть проще говоря, открывает новый терминал. Все переменные окружения, созданные в этом файле вступают в силу каждый раз когда началась новая терминальная сессия.
.bash_profile
Эти переменные вступают в силу каждый раз когда пользователь подключается удаленно по SSH. Если этот файл отсутствует система будет искать .bash_login или .profile.
/etc/environment
Этот файл для создания, редактирования и удаления каких-либо переменных окружения на системном уровне. Переменные окружения, созданные в этом файле доступны для всей системы, для каждого пользователя и даже при удаленном подключении.
/etc/bash.bashrc
Системный bashrc. Этот файл выполняется для каждого пользователя, каждый раз когда он создает новую терминальную сессию. Это работает только для локальных пользователей, при подключении через интернет, такие переменные не будут видны.
/etc/profile
Системный файл profile. Все переменные из этого файла, доступны любому пользователю в системе, только если он вошел удаленно. Но они не будут доступны, при создании локальной терминальной сессии, то есть если вы просто откроете терминал.
Все переменные окружения Linux созданные с помощью этих файлов, могут быть удаленны всего лишь удалением их оттуда. Только после каждого изменения, нужно либо выйти и зайти в систему, либо выполнить эту команду:
Добавление пользовательских и системных переменных окружения в Linux
Теперь, когда вы знаете немного теории, перейдем к практике. Локальные переменные окружения в Linux можно создавать следующими командами:
var=значение
export var=значение
Эти переменные будут доступны только для текущей терминальной сессии.
Для удаления переменных окружения можно использовать несколько команд:
1. Использование env
По умолчанию с помощью env можно посмотреть все установленные переменные среды. Но с опцией -i она позволяет временно удалить все переменные оболочки и выполнить команду без переменных.
$ env -i [переменная=значение] команда
Var — это любая переменная, которую вы хотите передать этой команде.
Такая команда запустит оболочку вообще без переменных окружения:
После запуска такого окружения, не будет доступно никаких переменных, но после выхода все вернется на свои места.
2. Использование unset
Это другой способ удаления переменных окружения Linux. Unset удаляет переменную по имени до конца текущей сессии:
3. Установить значение переменной в »
Это самый простой способ удаления переменных окружения в Linux, устанавливая пустое значение переменной, вы удаляете ее до конца текущей сессии.
Замечание: С помощью таких способов вы можете изменять значения системных или пользовательских переменных, но они будут актуальны только для текущего сеанса.
Создание пользовательских и системных переменных окружения
В этом разделе рассмотрим как установить и удалить системные и пользовательские переменные не только для текущего сеанса, а так чтобы эффект сохранялся после перезагрузки.
1. Устанавливаем и удаляем локальные переменные в Linux
Давайте создадим локальную переменную VAR и установим ей любое значение, затем удалим ее с помощью unset и убедимся что она удалена:
VAR1=’Losst’
echo $VAR1
unset VAR1
echo $VAR1
Другой способ создать переменную — команда export. Удалим ее присвоив пустое значение:
export VAR=’Losst’
echo $VAR
VAR=
echo $VAR
Теперь создадим переменную VAR2 также зададим ей значение. А потом временно удалим все локальные переменные выполнив env -i. Она запустит оболочку без каких-либо переменных. После ввода exit все переменные будут восстановлены.
VAR2=’Losst’
echo $VAR2
env -i bash
echo $VAR2
Установка и удаление пользовательских переменных
Отредактируйте файл .bashrc, в вашей домашней директории, добавив команду export, для экспортирования нужной переменной. Затем выполните команду source для применения изменений. Создадим, например, переменную CD:
Добавьте такую строчку (o, затем вставить, затем Esc и :wq):
export CD=’This is Losst Home’
Теперь осталось обновить конфигурацию:
source .bashrc
echo $CD
Для удаления этой переменной просто удалите ее из .bashrc.
Теперь добавим переменную окружения с помощью .bash_profile. Эта переменная, как вы уже знаете будет доступна только при удаленном входе:
export VAR2=’This is Losst Home’
И выполните эти команды, чтобы применить изменения и проверить добавление переменной:
source .bash_profile
echo $VAR2
Переменная недоступна, так как вы создали локальную терминальную сессию, теперь подключитесь по ssh:
Удалить эту переменную окружения можно так же как и в предыдущем случае, удалив ее из файла.
Замечание: Эти переменные доступны всегда, но не для всех пользователей.
Установка и удаление системных переменных окружения
Создадим переменную, доступную для всех пользователей, во всех терминальных сессиях, кроме удаленных, добавлением ее в /etc/bash.profile:
vi /etc/bash.profile
export VAR=’This is system-wide variable’
Теперь эта переменная доступна для всех пользователей, во всех терминалах:
echo $VAR
sudo su
echo $VAR
su —
echo $VAR
Если вы хотите сделать переменную окружения доступной для всех пользователей, которые подключаются к этой машине удаленно, отредактируйте файл /etc/profile:
export VAR1=’This is system-wide variable for only remote sessions’
Обновите конфигурацию, и проверьте доступность переменной, она будет доступна только удаленно:
source /etc/profile
echo $VAR1
Если нужно добавить переменную окружения в Linux, так чтобы она была доступна и удаленно, и для локальных сессий, экспортируйте ее в /etc/environment:
export VAR12=’I am available everywhere’
source /etc/environment
echo $VAR12
sudo su
echo $VAR12
exit
ssh localhost
echo $VAR12
Как видите, переменная доступна и для локальных пользователей и удаленно.
Выводы
С помощью этих нескольких способов мы можем изменить переменные окружения. Если вы знаете другие интересные способы это сделать, поделитесь в комментариях!
Обнаружили ошибку в тексте? Сообщите мне об этом. Выделите текст с ошибкой и нажмите Ctrl+Enter.
Похожие записи
Оцените статью
(22 оценок, среднее: 4,05 из 5)
Об авторе
Основатель и администратор сайта losst.ru, увлекаюсь открытым программным обеспечением и операционной системой Linux. В качестве основной ОС сейчас использую Ubuntu. Кроме Linux, интересуюсь всем, что связано с информационными технологиями и современной наукой.
12 комментариев к “Переменные окружения в Linux”
/etc/profile
«Все переменные из этого файла, доступны любому пользователю в системе, только если он вошел удаленно. »
А что значит вошел удаленно? Через SSH? Ответить
Написанное справедливо для всех современных дистрибутивов? Ответить
Скажите можно ли запускать видео на 2-м мониторе добавив переменную в ./bashrc к примеру:
env DISPLAY=0:1 totem (ну или другой проигрыватель)?
или лучше использовать:
export DISPLAY=0:1 totem Ответить
Думаю: лучше env -i DISPLAY=0:1 totem в ~/.xinputrc, только вот с totem’ом могут быть те ещё грабли — тут уже не подскажу. а вот если там же, в ~/.xinputrc, будет export DISPLAY=0:1, то это подействует и на X-сервер. Ну, и ваше export DISPLAY=0:1 totem — это уже ошибка, тогда уж в две строки:
export DISPLAY=0:1
totem
Но, totem будет запускаться вместе с x-сервером. может проще создать alias с env в ~/.bashrc? А может в totem есть ещё какие опции, как, например, в mplayer -display? Ответить
«. добавлением ее в /etc/bash.profile
.
Затем обновляем:
source /etc/bash.bashrc»
я думал обновлять надо отредактированный файл, или это опечатка? Ответить
Позволю себе добавить к вышесказанному:
VAR=1 # переменная видна только для ТЕКУЩЕГО процесса
$VAR
>> 1: команда не найдена
set | grep VAR # set без параметров отобразит ВСЕ (как локальные так и глобальные) переменные
>> VAR=1
env | grep VAR
>>
bash # запустим дочерний процесс
$VAR # наша переменная в нем не видна
>>
exit # выходим
$VAR # переменная сохранилась в родительском процессе
>> 1: команда не найдена
VAR=2 bash # установим переменную для дочернего процесса
$VAR # она видна в дочернем процессе
>> 2: команда не найдена
set | grep VAR # так же видна в set
>> VAR=2
exit # закрываем дочерний процесс
$VAR # в родительском процессе хранится свой экземпляр переменной
>> 1: команда не найдена
unset VAR
$VAR
>> # значение переменной сброшено export VAR=3 # переменная видна в ТЕКУЩЕМ и ДОЧЕРНИХ процессах
$VAR
>> 3: команда не найдена
set | grep VAR
>> VAR=3
env | grep VAR
>> VAR=3
printenv | grep VAR
>> VAR=3
bash # запускаем дочерний процесс
env | grep VAR
$VAR # переменная доступна
>> 3: команда не найдена
VAR=2 # можем изменить ее значение
$VAR
>> 2: команда не найдена
unset VAR # сбросим значение
$VAR
>> # переменная не определена
exit
$VAR
>> 3: команда не найдена # родительский процесс хранит значение переменной после сброса в дочернем
env | grep VAR
>> VAR=3 Ответить
«Системный файл profile. Все переменные из этого файла, доступны любому пользователю в системе, только если он вошел удаленно. Но они не будут доступны, при создании локальной терминальной сессии, то есть если вы просто откроете терминал.» – неверно. Переменная будет доступна везде: в терминале, GUI программах, не важно. Только что проверял локально. Ответить
Пытался разобраться в этом вопросе, и мне кажется что вы не совсем правы.Во первых есть нюансы выполнения данного скрипта поэтому результат может несколько отличаться для Ubuntu Debian Arch В Linux имеется два типа стартовых оболочек (login shells) — Интерактивные оболочки и Неинтерактивные оболочки. Интерактивная оболочка используется, когда пользователь может взаимодействовать с оболочкой, т.е., например, типичное приглашение командной строки bash. Неинтерактивная оболочка используется, когда пользователь не может взаимодействовать с оболочкой, т.е. выполнение bash-сценариев.
Разница проста: файл /etc/profile выполняется только для интерактивных оболочек, а файл /etc/bashrc – как для интерактивных, так и для неинтерактивных. Как правило, если вы вводите свой пароль в текстовом режиме (например, на текстовой консоли или удаленно с помощью ssh), то shell вы получаете логин shell. Однако, если вы вводите свой пароль в графической программе и входите в графическую среду, это обходит обычный логин shell. Чтение .profile в этом случае зависит от того, как настроен графический сеанс; например, он варьируется между распределениями Linux, между дисплейными менеджерами и между окружениями рабочего стола. Иногда одна из программ в цепочке явно вызывает логин shell; иногда одна из program явно читает ~/.профиль; а иногда ничего этого не происходит и ~/.профиль не читается. »
Поэтому поведение еще зависит и от системы. Для моего Debian все происходит так, вошел в систему через графическую оболочку, запустил Терминал переменных окружения нет, в этой же консоли залогинился заново под этим же пользователем ( i mean su — UserName) или под другим но с вводом пароля переменные окружения считываются, т.е. Если в консоли пароль вводился, файлы в /etc/profile.d/ отработались(принудительный логин,ssh, все что требует ввода пароля в консоли), если не вводился то этих переменных окружения не будет.
Но здесь есть особенности настройки именно в вашей ОС, они могут немного отличаться Ответить
Олег Феликсович
FiveFiveFive
Привет всем. А какая переменная отвечает за заголовок терминала? например PS1 отвечает за первое приглашение, а вот про заголовок окна терминала, что-то я не нашёл? или какими командами можно изменить этот самый заголовок? всем удачи. Ответить
Источник: losst.pro
EnvironmentVariables
Environment variables provide a way to influence the behaviour of software on the system. For example, the «LANG» environment variable determines the language in which software programs communicate with the user.
Environment variables consist of names that have values assigned to them. For example, on a typical system in the US we would have the value «en_US.UTF-8» assigned to the «LANG» variable.
The meaning of an environment variable and the format of its value are determined by the application using it. There are quite a few well-known environment variables for which the meaning and the format have been agreed upon and they are used by many applications.
Manipulating environment variables and values
While quite a few graphical system configuration applications actually manipulate environment variables in the background, the command-line allows for maximum flexibility when manipulating environment variables.
Note: The shell techniques explained in the following sections apply to the Bourne Shell family of command line shells, which includes sh, ksh, and bash, which is the default shell shipped with Ubuntu. The commands may be different on other shells such as csh.
Setting values to environment variables
In order to set a value to an existing environment variable, we use an assignment expression. For instance, to set the value of the «LANG» variable to «he_IL.UTF-8», we use the following command:
LANG=he_IL.UTF-8
If we use an assignment expression for a variable that doesn’t exist, the shell will create a shell variable, which is similar to an environment variable but does not influence the behaviour of other applications.
A shell variable can be exported to become an environment variable with the export command. To create the «EDITOR» environment variable and assign the value «nano» to it, you can do:
EDITOR=nano export EDITOR
The bash shell (the default command-line shell in Ubuntu) provides a shortcut for creating environment variables. The previous example could be performed with the following single command:
export EDITOR=nano
Examining values of environment variables
The printenv command prints the names and values of all currently defined environment variables:
printenv
To examine the value of a particular variable, we can specify its name to the printenv command:
printenv TERM
Another way to achieve that is to use the dollar sign ($), as used in the following example:
echo $TERM
There is a command for doing temporary, short-term changes to the environment. It can also be used to display the current environment. This command is env.
The dollar sign can actually be used to combine the values of environment variables in many shell commands. For example, the following command can be used to list the contents of the «Desktop» directory within the current user’s home directory.
ls $HOME/Desktop
For the sake of completeness: If you want to print the names and values also of the non-exported shell variables, i.e. not only the environment variables, this is one way:
( set -o posix ; set ) | less
Desktop environment specifics
If you use a terminal window to examine environment variables, you actually study the environment variables of the shell that is running in the terminal. Those variables are not necessarily available in the graphical environment of the desktop. To examine the environment variables that are effective when you for instance start an application from the launcher, you can follow the guidance in this Ask Ubuntu answer.
Erasing environment variables
While simply setting an empty value to an environment variable, as shown in the example below, may nullify its effect in most cases, there are a few variables such as «POSIXLY_CORRECT» whose mere existence, even with an empty value, influences the behavior of programs.
export LC_ALL=
The unset command can be used in order to completely erase the existence of an environment variable:
unset LC_ALL
It is also possible to use the «-n» switch to the export command in order to un-export an environment variable and therefore demote it to become a shell variable while preserving its value.
export -n LC_ALL
Working principles of environment variables
A few simple principles govern how environment variables work and achieve their effect.
Process locality
The values of environment variables are local, which means they are specific to the running process in or for which they were set. This means that if we open two terminal windows (which means we have two separate bash processes running), and change a value of an environment variable in one of the windows, that change will not be seen by the shell in the other window or any other program currently on the desktop.
Inheritance
When a parent process creates a child process, for example when we run the «gedit» command from the terminal and «bash» (the parent process) creates «gedit» (the child process), the child process inherits all the environment variables and values the parent process had.
This means that if we set a new value to the «LANG» environment variable in the terminal, and then run «gedit» from that same terminal , «gedit» will inherit the new value of «LANG», and therefore may display in a different language than the rest of the processes on the desktop. (See The LANGUAGE priority list, though.)
Note that because of the Process Locality principle explained above, once we run Gedit, changes to environment variables of the parent process will not be seen by the child process and vice-versa.
Note: in the Gnome graphical desktop environment, gnome-session is the parent process of all the processes running on the desktop. This fact (along with the Inheritance principle) is the key to our ability to powerfully influence the operation of our desktop with environment variables. The equivalent process in KDE is kde-session.
Case sensitivity
The names of environment variables are case sensitive. This means that lang is not the same variable as LANG, Lang, or laNg.
It is a common practice to name all environment variables with only English capital letters and underscore (_) signs.
Bash’s quick assignment and inheritance trick
The bash shell has a trick to allow us to set one or more environment variables and run a child process with single command. For example, in order to set the «LANGUAGE» and «FOO» environment variables and then run «gedit», we would use the following command:
LANGUAGE=he FOO=bar gedit
Note: When using this command, the new values are only assigned to the environment variables of the child process (in this case gedit). The variables of the shell retain their original values. For instance, in the example above, the value of «LANGUAGE» will not change from its original value, as far as subsequent commands to the shell are concerned.
A similar behaviour can be achieved with other shells by using the env command.
Persistent environment variables
So far we’ve only discussed ways set an environment variable value temporarily until the shell session in which it was set is closed. One may wonder if there is a way to somehow permanently set an environment variable to a certain value.
Session-wide environment variables
Suitable files for environment variable settings that should affect just a particular user (rather than the system as a whole) are ~/.pam_environment and ~/.profile. After having edited one of those files, you should re-login in order to initialize the variables.
~/.pam_environment
This file is specifically meant for setting a user’s environment. It is not a script file, but rather consists of assignment expressions, one per line. This example sets the variable FOO to a literal string and modifies the PATH variable:
- When doing a simple variable assignment like the FOO=bar example, quotes have not special meaning. This means that values cannot contain spaces.
- The syntax used for modifying PATH, which differs from the syntax of shell script files, is required for variable expansion to work. Some variables, like HOME, might not be set at the time ~/.pam_environment is parsed. See /etc/security/pam_env.conf for more details.
- ~/.pam_environment is written to when you use various GUIs to set the language or regional formats. Consequently, if you for instance set LC_TIME by editing ~/.pam_environment manually, your entry will be overwritten if you afterwards use the Language Support GUI to change the regional formats setting.
~/.profile
In this file you can also place environment variable assignments, since it gets executed automatically by the DisplayManager during the start-up process desktop session as well as by the login shell when one logs in from the textual console. This is a ~/.profile equivalent of the above example:
export FOO=bar export PATH=»$PATH:$HOME/MyPrograms»
Note: The code in ~/.profile is run after ~/.pam_environment has been read. That makes ~/.profile suitable to use if you want to override a locale related variable that was set in ~/.pam_environment via e.g. Language Support.
Other files
Shell config files such as ~/.bashrc, ~/.bash_profile, and ~/.bash_login are often suggested for setting environment variables. While this may work on Bash shells for programs started from the shell, variables set in those files are not available by default to programs started from the graphical environment in a desktop session.
System-wide environment variables
A suitable file for environment variable settings that affect the system as a whole (rather than just a particular user) is /etc/environment. An alternative is to create a file for the purpose in the /etc/profile.d directory.
/etc/environment
This file is specifically meant for system-wide environment variable settings. It is not a script file, but rather consists of assignment expressions, one per line.
FOO=bar
Note: Variable expansion does not work in /etc/environment.
/etc/profile.d/*.sh
Files with the .sh extension in the /etc/profile.d directory get executed whenever a bash login shell is entered (e.g. when logging in from the console or over ssh), as well as by the DisplayManager when the desktop session loads.
You can for instance create the file /etc/profile.d/myenvvars.sh and set variables like this:
export JAVA_HOME=/usr/lib/jvm/jdk1.7.0 export PATH=$PATH:$JAVA_HOME/bin
Other files
While /etc/profile is often suggested for setting environment variables system-wide, it is a configuration file of the base-files package, so it’s not appropriate to edit that file directly. Use a file in /etc/profile.d instead as shown above. (Files in /etc/profile.d are sourced by /etc/profile.)
/etc/default/locale is specifically meant for system-wide locale environment variable settings. It’s written to by the installer and when you use Language Support to set the language or regional formats system-wide. On a desktop system there is normally no reason to edit this file manually.
The shell config file /etc/bash.bashrc is sometimes suggested for setting environment variables system-wide. While this may work on Bash shells for programs started from the shell, variables set in that file are not available by default to programs started from the graphical environment in a desktop session.
sudo caveat
- Run sudo visudo
- Add the following to the bottom:
Defaults env_keep += «http_proxy SOMEOTHERVARIABLES ANOTHERVARIABLE ETC»
Launching desktop application with an environment variable
You can add an environment variable to an application by editing its .desktop file. For example, to run «digiKam» with the environment variable APPMENU_DISPLAY_BOTH=1, find the corresponding digikam.desktop file and add the setting of the variable, via the env command, to the entry «Exec»:
Exec=env APPMENU_DISPLAY_BOTH=1 digikam -caption «%c» %i
List of common environment variables
Each application is free to define and use its own environment variables. Many manual pages include long lists of environment variables that can affect the behaviour of the application they describe. However, the most useful variables are common to many applications.
File-location related variables
The following variables determine how the system locates various files in order to operate.
Источник: help.ubuntu.com