Проблема в том, что связанный документ запутан и / или явно неверен в части пользовательских переменных. Я все еще пытаюсь найти способ сделать это без использования оболочки. $ 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 - "... может быть проще всего установить переменные".
Какие программы читать /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
Почему уродливый статический путь? ${PATH}не будет работать для меня. Я несколько раз пытался обойти свой логин, пытаясь обойти его, поэтому я придерживался уродливой статической копии значений по умолчанию :)
Обходной путь для зашифрованных домашних папок
В выпусках Ubuntu вплоть до Precise 12.04 Beta 2 включительно, если вы используете зашифрованный домашний каталог, вам нужно будет изменить /etc/pam.d/common-sessionего, чтобы загрузить ~/.pam_environment. Это решение, очевидно, работает для более ранних выпусков, но я не проверял его.
Это кажется проблемой с зашифрованными домашними каталогами. я добавил
требуется сеанс pam_env.so
в конце /etc/pam.d/common-session и теперь ~ / .pam_environment читается. В другой системе без зашифрованных домашних каталогов (также 10.04) обходной путь не требуется. Возможно, в моем случае система пытается прочитать ~ / .pam_environment, прежде чем она расшифрована.
Это все еще неправильно: ${HOME}тоже не сработает. Там нет расширения в .pam_environment.
detly
2
@ детально есть расширение .pam_environment, но HOMEобычно не так рано. Если бы эта строка прочитала DEFAULT=${PATH}/Applications/jdk, вы бы увидели значение PATHвставленной в нее.
Чтобы добавить ответ sagarchalise, я могу суммировать, что ссылка предлагает в качестве подходящих мест для настроек.
Для глобальных настроек, общесистемных переменных среды
/etc/environment
/etc/profile
или/etc/bash.bashrc
Со страницы:
Использование
/etc/profile
- это очень Unix-й способ, но его функциональность значительно снижена в Ubuntu. Он существует только для указания/etc/bash.bashrc
и сбора записей/etc/profile.d
.В моей системе единственная интересная запись в файле profile.d - это
/etc/profile.d/bash_completion.sh
.Для локальных или индивидуальных настроек
Рекомендована предыдущая версия страницы Ubuntu
~/.pam_environment
, но в настоящее время страница предлагает, чтобы, если это не сработало, вы должны использовать~/.bash_profile
или~./bash_login
- если один из них существует, bash выполняет его вместо~/.profile
запуска bash в качестве оболочки входа в систему. Bash предпочтет~/.bash_profile
в~/.bash_login
. [...] Эти файлы не влияют на графическую сессию по умолчанию. "~/.bashrc
- "... может быть проще всего установить переменные".источник
/etc/environment
и когда? Похоже, что он не работает с Cron, даже при использованииSHELL=/bin/bash
/etc/environment
нравитсяJAVA_HOME="/opt/java"
иANT_HOME="/opt/ant"
как это сделатьУ тебя есть:
который в Lucid и Maverick работает
если присутствует, и если оболочка пользователя bash:
Для пользовательской среды существует запутанный массив, специфичный для оболочки, и считается ли он «оболочкой входа в систему». Если оболочка bash:
для ш / тире:
для zsh я даже не собираюсь пытаться понять это .
источник
Как рекомендовано на https://help.ubuntu.com/community/EnvironmentVariables :
Глобальные переменные среды должны влиять на всех пользователей
/etc/environment
.Пользовательские переменные среды должны быть установлены в
~/.pam_environment
.Избегайте профилей и файлов rc для установки переменных среды в Ubuntu. Они вызвали у меня больше головных болей, чем они того стоят.
Это легче сказать, чем сделать, однако;)
Возможно, вы столкнетесь с тем же разрывом в конфигурации, который существовал для меня. Смотрите обходной путь для зашифрованного дома ниже.
Мой
~/.pam_environment
:Почему уродливый статический путь?
${PATH}
не будет работать для меня. Я несколько раз пытался обойти свой логин, пытаясь обойти его, поэтому я придерживался уродливой статической копии значений по умолчанию :)Обходной путь для зашифрованных домашних папок
В выпусках Ubuntu вплоть до Precise 12.04 Beta 2 включительно, если вы используете зашифрованный домашний каталог, вам нужно будет изменить
/etc/pam.d/common-session
его, чтобы загрузить~/.pam_environment
. Это решение, очевидно, работает для более ранних выпусков, но я не проверял его.Гюнтер Монтег (g-montag) написал 2010-08-19:
Адаптировано из моего ответа на Супер пользователя: https://superuser.com/a/408373/66856
источник
${HOME}
тоже не сработает. Там нет расширения в.pam_environment
..pam_environment
, ноHOME
обычно не так рано. Если бы эта строка прочиталаDEFAULT=${PATH}/Applications/jdk
, вы бы увидели значениеPATH
вставленной в нее.