Где объявлять переменные окружения?

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

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

Чтобы добавить к ответу sagarchalise, я могу обобщить то, что ссылка предлагает в качестве подходящих мест для настроек.

Для глобальных настроек, общесистемных переменных среды

  • Воспользуйся /etc/environment
  • Не используйте /etc/profile или /etc/bash.bashrc

Со страницы:

/etc/environment [...] специально предназначен для общесистемных настроек переменных среды. Это не файл сценария, а скорее состоит из выражений присваивания, по одному на строку. В частности, в этом файле хранятся общесистемные настройки локали и пути.

С помощью /etc/profile это очень похожий на Unix способ, но его функциональность значительно сокращена в Ubuntu. Он существует только для того, чтобы указывать на /etc/bash.bashrc и собирать заявки от /etc/profile.d.

В моей системе единственная интересная запись - запись в профиле.d - это /etc/profile.d/bash_completion.sh.

Для локальных или пользовательских настроек

Страница Ubuntu рекомендует ~/.pam_environment, который загружается с помощью система PAM когда ваш сеанс запущен (TTY, GUI, SSH и т.д.). Это пользовательский эквивалент /etc/environment и использует тот же синтаксис. Ссылка предлагает альтернативы, если это не сработает:

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

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

  • ~/.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

для sh/dash:

$HOME/.profile

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

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

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

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

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

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

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

Мой ~/.pam_environment:

PATH            DEFAULT=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:${HOME}/binIDEA_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