Я получаю что-то странное в моей среде.

У меня есть .bash_profile который проверяет только .bashrc и затем получает его. У меня есть JAVA_HOME в этом файле, который правильно устанавливает переменную и экспортирует ее. Однако, если я закомментирую строку JAVA_HOME в .bashrc , в моем окружении все еще будет отображаться еще один JAVA_HOME , отличный от того, который я устанавливал в .bashrc . Откуда этот JAVA_HOME ?

Кроме того, похоже, что любая оболочка, которую я запускаю - csh, sh, bash и т.д. - откуда-то JAVA_HOME . Я не знаю, что могло заставить это тянуть в csh, sh, bash и т.д…

2 ответа2

0

Bash следует соглашениям Posix и при запуске сначала устанавливает контекст оболочки, используя файл /etc /profile. В системах RedHat файл /etc /profile содержит код для поиска в /etc/profile.d файлов, заканчивающихся на «.sh». Затем он получает источник каждого из них один за другим, добавляя переменные, установленные в нем, в вашу среду.

Аналогично, оболочка csh/tcsh запускает /etc/csh.login, который просматривает тот же каталог /etc/profile.d для файлов, заканчивающихся на «.csh», и выполняет их поиск.

Попробуйте запустить:

$ fgrep JAVA_HOME /etc/profile.d/*.sh

и вы, вероятно, найдете виновника. Вы можете отредактировать этот файл sudo и установить в нем правильное значение, хотя это будет глобальным изменением для всех, кто входит в систему, поэтому внимательно подумайте, прежде чем делать это.

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

0

/etc/profile является наиболее распространенным

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