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

132

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

  • 29
    Какой правильный сайт и дубликат ответа?
  • 2
    Отличный вопрос Нет хороших ответов.
Показать ещё 1 комментарий
Теги:
java-home
environment-variables

8 ответов

195
Лучший ответ

Поместите переменные окружения в глобальный файл /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. Подробнее.

  • 9
    Перезапуск все еще необходим для того, чтобы эти изменения повлияли на приложения, запускаемые через Ubuntu UI (т. Е. Двойной щелчок на приложении)
  • 7
    Чем это отличается от установки переменной в каждой чертовой оболочке?
Показать ещё 9 комментариев
30

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

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

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

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

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

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

  • 0
    По предоставленной вами ссылке: «Приведенное ниже не рекомендуется, но предыдущее решение (?), Представленное на этой странице, не работало с выпуском 10.04 для настольных компьютеров. Pam_environment естественным образом не распространяется на распространение».
  • 14
    ~ / .pam_environment - это отличный способ заблокировать ваш логин, если вы предполагаете, что он обрабатывает переменные. Я попытался установить PATH равным $ {PATH}: $ {HOME} / bin, и он не смог оценить переменные. Чистый результат: невозможно войти в систему :( Исправлено посещением Ctrl-Alt-1 и запуском "/ bin / rm ~ / .pam_environment". Будьте исключительно осторожны или используйте дополнительную учетную запись для проверки настроек здесь.
Показать ещё 4 комментария
13

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

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

9

Вам нужно поместить определение переменной в файл ~/.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 файлом.

1

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

root@masternode# . ~/.profile

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

  • 0
    Вы должны использовать ~/.profile а не ./.profile .
1

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

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

1

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню