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

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

  1. Глобальные переменные среды, предназначенные для воздействия на всех пользователей?
  2. Пользовательские переменные среды?
63
задан 6 January 2012 в 02:26

4 ответа

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

17
ответ дан 6 January 2012 в 02:26

У вас есть:

/etc/profile: общесистемный .profile file для оболочки Bourne (sh(1)). и раковины, совместимые с Борном (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

для sh/dash:

$HOME/.profile

для zsh, то я даже не буду пытаться разобраться в этом.

7
ответ дан 6 January 2012 в 02:26

Чтобы добавить к ответу 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 , который загружается системой PAM при запуске сеанса (TTY, GUI, SSH и т. д.). Это пользовательский эквивалент / etc / environment и использует тот же синтаксис. Ссылка предлагает альтернативы, если это не работает:

  • ~ / .profile для большинства оболочек. Этот файл также может быть применен к сеансу графического интерфейса с помощью диспетчера дисплея, но это не обязательно относится ко всем диспетчерам дисплея или серверам дисплея (X11 против Wayland) или сеансам.

И специфично для bash:

  • ~ / .bash_profile или ~. / bash_login - Если один из них существует, bash выполняет его вместо ~ / .profile , когда bash запускается как оболочка входа. Bash предпочтет ~ / .bash_profile ~ / .bash_login . [...] По умолчанию эти файлы не влияют на графический сеанс. "
  • ~ / .bashrc -" ... может быть самым простым местом для установки переменных ".
82
ответ дан 6 January 2012 в 02:26

В соответствии с рекомендациями на https://help.ubuntu.com/community / EnvironmentVariables :

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

  2. Пользовательские переменные среды должны быть установлены в ~ / .pam_environment .

Избегайте использования файлов профиля и rc для установки переменных среды в Ubuntu. Они причинили мне больше головной боли, чем они того стоят.

Однако это легче сказать, чем сделать;)

Возможно, вы столкнетесь с той же проблемой конфигурации, которая существовала для меня. См. Обходной путь для зашифрованной домашней страницы ниже.

My ~ / .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 . Это решение очевидно работает для более ранних выпусков, но я не тестировал его.

Guenther Montag (g-montag) написал 19 августа 2010 г .:

Похоже, это проблема с зашифрованными домашними каталогами. Я добавил

требуемый сеанс pam_env.so

в конце /etc/pam.d/common-session, и теперь ~ / .pam_environment читается. В другой системе без зашифрованных домашних каталогов (также 10.04) обходной путь не требуется. Возможно, в моем случае система пытается прочитать ~ / .pam_environment перед его расшифровкой.

Адаптировано из моего ответа о суперпользователе: https://superuser.com/a/408373/66856

5
ответ дан 6 January 2012 в 02:26

Другие вопросы по тегам:

Похожие вопросы: