Где объявить переменные среды?
Каковы правильные места для:
- Глобальные переменные среды должны влиять на всех пользователей?
- Пользовательские переменные среды?
4 ответа
Я думаю, что вики-страница сообщества по переменным среды поможет вам разобраться
Чтобы добавить ответ sagarchalise, я могу суммировать, что ссылка предлагает в качестве подходящих мест для настроек.
Для глобальных настроек, общесистемных переменных среды
- использование
/etc/environment
- Не использовать
/etc/profile
или же/etc/bash.bashrc
Со страницы:
/etc/environment
[...] специально предназначено для общесистемных настроек переменных среды. Это не файл сценария, а скорее состоит из выражений присваивания, по одному на строку. В частности, этот файл хранит общесистемные настройки языка и пути.
С помощью /etc/profile
это очень Unix-у путь, но его функциональность значительно снижена в Ubuntu. Он существует только для указания на /etc/bash.bashrc
и собирать записи из /etc/profile.d
,
В моей системе единственная интересная запись в файле profile.d: /etc/profile.d/bash_completion.sh
,
Для локальных или индивидуальных настроек
Предыдущая версия страницы Ubuntu рекомендуется ~/.pam_environment
, но страница в настоящее время предлагает, что если это не работает, вы должны использовать
~/.profile
- Вероятно, это лучший файл для размещения назначений переменных среды, поскольку он выполняется автоматически DisplayManager во время сеанса рабочего стола процесса запуска, а также оболочкой входа в систему при входе из текстовой консоли.~/.bash_profile
или же~./bash_login
- Если один из них существует, bash выполняет его вместо~/.profile
когда bash запускается как оболочка для входа. Баш предпочтет~/.bash_profile
в~/.bash_login
, [...] Эти файлы не влияют на графическую сессию по умолчанию. "~/.bashrc
- "... может быть проще всего установить переменные".
У тебя есть:
/ etc / profile: общесистемный файл.profile для оболочки Bourne (sh(1)) и совместимых с Bourne оболочек (bash(1), ksh(1), ash(1), ...).
который в Lucid и Maverick работает
/etc/profile.d/*.sh
если присутствует, и если оболочка пользователя bash:
/etc/bash.bashrc
Для пользовательской среды существует запутанный массив, специфичный для оболочки, и считается ли он "оболочкой входа в систему". Если оболочка bash:
~/.bash_profile
The personal initialization file, executed for login shells
~/.bashrc
The individual per-interactive-shell startup file
для ш / тире:
$HOME/.profile
для zsh я даже не собираюсь пытаться понять это.
Как рекомендовано на https://help.ubuntu.com/community/EnvironmentVariables:
Глобальные переменные среды, предназначенные для воздействия на всех пользователей, должны войти в
/etc/environment
,Пользовательские переменные среды должны быть установлены в
~/.pam_environment
,
Избегайте профилей и файлов rc для установки переменных среды в Ubuntu. Они вызвали у меня больше головной боли, чем они того стоят.
Это легче сказать, чем сделать, однако;)
Возможно, вы столкнетесь с тем же разрывом в конфигурации, который существовал для меня. Смотрите обходной путь для зашифрованного дома ниже.
мой ~/.pam_environment
:
PATH DEFAULT=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:${HOME}/bin
IDEA_JDK DEFAULT=${HOME}/Applications/jdk
Почему уродливый статический путь? ${PATH}
не будет работать для меня. Я несколько раз пытался обойти свой логин, пытаясь обойти его, поэтому я придерживался уродливой статической копии значений по умолчанию:)
Обходной путь для зашифрованных домашних папок
В выпусках Ubuntu вплоть до Precise 12.04 Beta 2 включительно, если вы используете зашифрованный домашний каталог, вам нужно будет изменить /etc/pam.d/common-session
чтобы загрузить его ~/.pam_environment
, Это решение, очевидно, работает для более ранних выпусков, но я не проверял его.
Гюнтер Монтег (g-montag) написал 2010-08-19:
Это кажется проблемой с зашифрованными домашними каталогами. я добавил
требуется сеанс pam_env.so
в конце /etc/pam.d/common-session и теперь ~/.pam_environment читается. В другой системе без зашифрованных домашних каталогов (также 10.04) обходной путь не требуется. Возможно, в моем случае система пытается прочитать ~/.pam_environment, прежде чем она расшифрована.
Адаптировано из моего ответа на Супер пользователя: https://superuser.com/a/408373/66856