У меня есть переменная 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 ответа
Вы должны включить этот export
в ваш ~/.bashrc
или ~/.bash_profile
чтобы он загружался каждый раз, когда вы начинаете новый сеанс.
Переменная среды, установленная в сеансе оболочки, сохраняется только в течение этого сеанса. Чтобы сохранить переменную, вы должны устанавливать ее каждый раз, когда запускается сеанс оболочки с использованием скрипта. Существует несколько файлов сценариев, которые существуют для этой цели и выполняются автоматически 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 соответственно.
Для получения дополнительной информации о разнице между этими файлами см. Следующую ссылку.
Также может быть полезно прочитать раздел INVOCATION файла man BASH, так как существует много косвенных факторов, которые влияют на то, какой скрипт запускается и когда.