1

У меня есть переменная JAVA_HOME, делая> echo $JAVA_HOME дает "old/path/to/my/jdk.1.7" . Я иду в терминал и делаю export JAVA_HOME=new/path/to/my/jdk.1.8.0 который прекрасно работает во время сеанса терминала, но как только я запускаю новую вкладку / экземпляр терминала и выполняю> echo $JAVA_HOME это дает мне: old/path/to/my/jdk.1.7 . Что я могу делать не так?

2 ответа2

5

Вы должны включить этот export в ваш ~/.bashrc или ~/.bash_profile чтобы он загружался каждый раз, когда вы начинаете новый сеанс.

3

Переменная среды, установленная в сеансе оболочки, сохраняется только в течение этого сеанса. Чтобы сохранить переменную, вы должны устанавливать ее каждый раз, когда запускается сеанс оболочки с использованием скрипта. Существует несколько файлов сценариев, которые существуют для этой цели и выполняются автоматически bash при каждом вызове. К сожалению, это не так просто, как кажется, потому что bash может быть вызван по-разному, и каждый тип вызова выполняет разные сценарии.

Для вызовов интерактивной оболочки входа в систему (console, ssh и т.д.) Вы можете установить переменную, добавив следующую строку в ~/.bash_profile, ~/.bash_login или ~/.profile. Bash будет искать эти файлы по порядку и запускать первый, который доступен для чтения.

Для интерактивных вызовов оболочки без входа в систему (подоболочек, терминалов из графической среды и т.д.) Используйте ~/.bashrc. Обратите внимание, что некоторые дистрибутивы (Ubuntu) исходные тексты ~/.bashrc из ~/.bash_profile, поэтому, установив их здесь, они также будут установлены для интерактивных входов в систему.

export JAVA_HOME=new/path/to/my/jdk.1.8.0

Также неинтерактивные вызовы оболочки (оболочки, вызываемые для запуска сценария) наследуют родительскую среду, но не выполняют никаких сценариев запуска.

Кроме того, для некоторых дистрибутивов (например, Ubuntu) рекомендуется редактировать файл ~/.pam_environment, но синтаксис немного отличается и требует одного выражения на строку.

JAVA_HOME DEFAULT=new/path/to/my/jdk.1.8.0

Если вы хотите, чтобы изменения были общесистемными, а не специфичными для пользователя, используйте /etc/bash.bashrc, /etc/profile и /etc/environment соответственно.

Для получения дополнительной информации о разнице между этими файлами см. Следующую ссылку.

https://stackoverflow.com/questions/415403/whats-the-difference-between-bashrc-bash-profile-and-environment

Также может быть полезно прочитать раздел INVOCATION файла man BASH, так как существует много косвенных факторов, которые влияют на то, какой скрипт запускается и когда.

http://linux.die.net/man/1/bash

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .