Сделайте $JAVA_HOME легко изменяемым в Ubuntu

В Ubuntu я хотел бы переключать свою переменную среды JAVA_HOME назад и вперед между Java 5 и 6.

Я открываю терминал и набираю следующее, чтобы установить переменную среды JAVA_HOME:

export JAVA_HOME=/usr/lib/jvm/java-1.5.0-sun

И в этом же окне терминала я набираю следующее, чтобы проверить, что переменная окружения была обновлена:

echo $JAVA_HOME

И я вижу /usr/lib/jvm/java-1.5.0-sun, что я ожидаю увидеть. Кроме того, я изменяю ~/.profile и устанавливаю переменную среды JAVA_HOME в /usr/lib/jvm/java-1.5.0-sun.

А теперь проблема - когда я открываю новое окно терминала и проверяю свою переменную среды JAVA_HOME, печатая echo $JAVA_HOME, я вижу, что моя переменная среды JAVA_HOME была возвращена обратно в Java 6. Когда я перезагружаю свою машину (или веду журнал и обратно, я полагаю) переменная окружения JAVA_HOME установлена ​​на Java 5 (предположительно, из-за изменений, которые я сделал в моем ~/.profile).

Есть ли способ обойти это так, чтобы я мог изменить свою среду JAVA_HOME без необходимости выходить из системы и снова входить в нее (И сделать так, чтобы изменение переменной среды сохранялось во всех новых окнах терминала)?

8 ответов

Решение

Поместите переменные среды в глобальный /etc/environment файл:

...
export JAVA_HOME=/usr/lib/jvm/java-1.5.0-sun
...

Выполните "source /etc/environment" в каждой оболочке, где вы хотите обновить переменные:

$ source /etc/environment

Проверьте, что это работает:

$ echo $JAVA_HOME
$ /usr/lib/jvm/java-1.5.0-sun

Отлично, не нужно выходить из системы.

Если вы хотите установить переменную окружения JAVA_HOME только в терминале, установите ее в файле ~/.bashrc.

Это, вероятно, решит вашу проблему: https://help.ubuntu.com/community/EnvironmentVariables

Общесессионные переменные среды

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

~ /.pam_environment - Этот файл специально предназначен для настройки среды пользователя. Это не файл сценария, а скорее состоит из выражений присваивания, по одному на строку.

Не рекомендуется:

~ /.profile - это, вероятно, лучший файл для размещения назначений переменных среды, поскольку он автоматически выполняется DisplayManager во время сеанса рабочего стола процесса запуска, а также оболочкой входа в систему при входе из текстовой консоли.

Попробуйте эти шаги.

- Мы собираемся отредактировать "etc\profile". Переменные среды должны быть введены внизу файла. Поскольку Ubuntu не дает доступа к корневой папке, нам придется использовать несколько команд в терминале

Шаг 1: Запустите Терминал. Введите команду: gksudo gedit /etc/profile

Шаг 2: Откроется текстовый файл профиля. Введите переменные среды внизу страницы........... Например: export JAVA_HOME=/home/alex/jdk1.6.0_22/bin/java

export PATH=/home/alex/jdk1.6.0_22/bin:$PATH

Шаг 3: сохраните и закройте файл. Проверьте, установлены ли переменные окружения с помощью команды echo........ Например, echo $PATH

Вы должны поместить определение переменной в ~/.bashrc файл.

Со страницы руководства bash:

Когда запускается интерактивная оболочка, которая не является оболочкой входа в систему, bash читает и выполняет команды из /etc/bash.bashrc и ~/.bashrc, если эти файлы существуют.

Традиционно, если вы хотите изменить только переменную в окнах терминала, установите ее в .bashrc файл, получаемый при каждом открытии нового терминала. .profile файл не создается каждый раз, когда вы открываете новый терминал.

Посмотрите на разницу между.profile и.bashrc: в чем разница между.bashrc, .bash_profile и.environment?

.bashrc должен решить вашу проблему. Тем не менее, это не правильное решение, так как вы используете Ubuntu. Смотрите соответствующую справочную страницу Ubuntu " Переменные среды сеанса". Таким образом, неудивительно, что .profile не работает для вас. Я использую Ubuntu 12.04 и xfce. Я настроил свой .profile и это просто не вступает в силу, даже если я выйду и войду. Подобный опыт здесь. Так что, возможно, вам придется использовать .pam_environment файл и полностью забыть о .profile, а также .bashrc, И обратите внимание, что .pam_environment это не файл скрипта.

Взгляни на bash(1)вам нужнаоболочка для входа ~/.profileто есть -l вариант.

После внесения изменений в.profile необходимо выполнить файл, чтобы изменения вступили в силу.

root@masternode# . ~/.profile

Как только это будет сделано, команда echo будет работать.

Я знаю, что это длинный холодный вопрос, но он возникает каждый раз, когда выходит новый или недавний крупный выпуск Java. Теперь это легко применимо к обмену 6 и 7.

Я делал это в прошлом с update-java-alternatives: http://manpages.ubuntu.com/manpages/hardy/man8/update-java-alternatives.8.html

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