Где объявить переменные среды?

59

Каковы правильные места для:

  1. Глобальные переменные среды должны влиять на всех пользователей?
  2. Пользовательские переменные среды?
Иван
источник

Ответы:

16

Я думаю, что вики-страница сообщества по переменным среды поможет вам разобраться

sagarchalise
источник
2
Проблема в том, что связанный документ запутан и / или явно неверен в части пользовательских переменных. Я все еще пытаюсь найти способ сделать это без использования оболочки. $ HOME / .profile, вероятно, лучшая ставка ...
Rmano
16
Пожалуйста, вставьте текст или сделайте снимок связанного контента - он может быть недоступен в будущем!
Nam G VU
4
Хотя это может теоретически ответить на вопрос, было бы предпочтительным включить здесь основные части ответа и предоставить ссылку для справки.
Томас Уорд
75

Чтобы добавить ответ 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 предпочтет ~/.bash_profileв ~/.bash_login. [...] Эти файлы не влияют на графическую сессию по умолчанию. "

  • ~/.bashrc - "... может быть проще всего установить переменные".
belacqua
источник
1
Какие программы читать /etc/environmentи когда? Похоже, что он не работает с Cron, даже при использованииSHELL=/bin/bash
SystemParadox
1
Похоже, что / etc / environment является частью PAM, что означает, что он должен устанавливать среду по умолчанию для всех процессов. Cron является особенным (то есть неработающим) тем, что специально перезаписывает эту среду своей собственной.
SystemParadox
так как ведет себя .bashrc? после bash_profile? вместо .profile?
открывается
1
@opensas Вы, вероятно, должны задать отдельный вопрос, ссылаясь на этот или ответ.
belacqua
@belacqua позволяет сказать , что мне нужно добавить 2 или более переменных среды /etc/environmentнравится JAVA_HOME="/opt/java" и ANT_HOME="/opt/ant" как это сделать
Kasun Siyambalapitiya
7

У тебя есть:

/ 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 я даже не собираюсь пытаться понять это .

MSW
источник
5

Как рекомендовано на https://help.ubuntu.com/community/EnvironmentVariables :

  1. Глобальные переменные среды должны влиять на всех пользователей /etc/environment.

  2. Пользовательские переменные среды должны быть установлены в ~/.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

Ален О'Ди
источник
Это все еще неправильно: ${HOME}тоже не сработает. Там нет расширения в .pam_environment.
detly
2
@ детально есть расширение .pam_environment, но HOMEобычно не так рано. Если бы эта строка прочитала DEFAULT=${PATH}/Applications/jdk, вы бы увидели значение PATHвставленной в нее.
Муру