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

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

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

7 ответов

Я думаю, это поможет вам разобраться

15
ответ дан 26 May 2018 в 01:17
  • 1
    Проблема заключается в том, что связанный документ запутан и / или явно неправилен в части переменных, определяемых пользователем. Я все еще пытаюсь найти оболочно-агностический способ сделать это. $ HOME / .profile, вероятно, лучший выбор ... – Rmano 19 January 2012 в 21:49
  • 2
    Вставьте текст или сделайте снимок связанного контента - он может быть недоступен в будущем! – Nam G VU 30 October 2014 в 12:06
  • 3
    Хотя это теоретически может ответить на вопрос , было бы предпочтительно включить здесь основные части ответа и предоставить ссылку для справки. – Thomas Ward♦ 17 July 2016 в 22:45

Я думаю, этот поможет вам разобраться в

15
ответ дан 6 August 2018 в 04:34

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

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

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

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

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

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

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

Предыдущая версия на странице Ubuntu рекомендуется ~/.pam_environment, но на странице в настоящее время предлагается, что если это не сработает, вы должны использовать

Использовать /etc/environment ~/.bash_profile или ~./bash_login - Если один из них существует, bash выполняет его вместо ~/.profile, когда bash запускается как оболочка входа. Баш предпочтет ~/.bash_profile ~/.bash_login. [...] Эти файлы не будут влиять на графический сеанс по умолчанию. " Не используйте /etc/profile или /etc/bash.bashrc
70
ответ дан 26 May 2018 в 01:17
  • 1
    Какие программы читают /etc/environment и когда? Кажется, что он не работает с cron, даже если вы используете SHELL=/bin/bash – SystemParadox 11 March 2013 в 16:49
  • 2
    Похоже, что / etc / environment является частью PAM, что означает, что он должен установить среду по умолчанию для всех процессов. cron является специальным (то есть сломанным), в частности, переписывая эту среду своей собственной. – SystemParadox 12 March 2013 в 15:32
  • 3
    так как работает .bashrc? после bash_profile? вместо .profile? – opensas 1 August 2013 в 23:50
  • 4
    @opensas Вероятно, вы должны задать отдельный вопрос, ссылаясь на этот вопрос или ответ. – belacqua 2 August 2013 в 02:21
  • 5
    @belacqua позволяет сказать, что мне нужно добавить 2 или более переменных окружения в /etc/environment, например JAVA_HOME="/opt/java" и ANT_HOME="/opt/ant" , как это сделать – Kasun Siyambalapitiya 16 November 2016 в 08:53

У вас есть:

/ etc / profile: общесистемный файл .profile для оболочки Bourne (sh (1)) и совместимые с Bourne оболочки (bash (1), ksh (1) , зола (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
ответ дан 26 May 2018 в 01:17

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

Глобальные переменные окружения, предназначенные для всех пользователей, должны войти в /etc/environment. Пользовательские переменные среды должны быть установлены в ~/.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) написал в 2010-08-19:

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

Адаптировано из моего ответа на Super User: https://help.ubuntu.com/community/EnvironmentVariables

5
ответ дан 26 May 2018 в 01:17
  • 1
    Это все еще неправильно: ${HOME} тоже не работает. В .pam_environment нет расширения. – detly 7 August 2014 в 08:47
  • 2
    @detly есть расширение в .pam_environment, но HOME не установлено, что раньше обычно. Если эта строка прочитала DEFAULT=${PATH}/Applications/jdk, вы увидели бы в ней значение PATH. – muru 8 June 2016 в 22:54

Как рекомендовано в 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) написал в 2010-08-19:

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

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

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

Адаптировано из моего ответа на Super User: https://superuser.com/a/ 408373/66856

5
ответ дан 7 August 2018 в 22:44

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

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

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

На странице:

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

Использование /etc/profile - очень способ Unix-y, но его функциональность значительно снижается в 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 -« ... может быть самым простым местом для установки переменных ».
70
ответ дан 10 August 2018 в 10:49

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

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