Сделать $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, не выходя из системы и обратно (И заставить эту переменную изменения изменить во всех новых окнах терминала)?

Ответ 1

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

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

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

$ source /etc/environment

Убедитесь, что он работает:

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

Отлично, не требуется выход из системы.

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

Ответ 2

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

Общие переменные окружения

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

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

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

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

Ответ 3

Попробуйте выполнить следующие действия.

- Мы собираемся отредактировать "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

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

Ответ 4

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

Из bash справочной страницы:

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

Ответ 5

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

См. разницу между .profile и .bashrc в вопросе: Какая разница между .bashrc,.bash_profile и .environment?

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

Ответ 6

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

Ответ 7

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

В прошлом я делал это с помощью update-java-alternatives: http://manpages.ubuntu.com/manpages/hardy/man8/update-java-alternatives.8.html

Ответ 8

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

[email protected]# . ~/.profile

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