У меня есть Виртуальная машина Ubuntu 11.04, и я хотел настроить свою среду разработки Java. Я сделал следующим образом
sudo apt-get install openjdk-6-jdk
Добавленный следующие записи в ~/.bash_profile
export JAVA_HOME=/usr/lib/jvm/java-6-openjdk
export PATH=$PATH:$JAVA_HOME/bin
Сохраните изменения и выход
Откройте терминал снова, и ввел следующее
echo $JAVA_HOME (blank)
echo $PATH (displayed, but not the JAVA_HOME value)
Ничего не произошло, как то, если экспорт JAVA_HOME и это - дополнение к ПУТИ, никогда не делались.
Я должен был перейти к ~/.bashrc и добавить следующую запись к концу файла
#Source bash_profile to set JAVA_HOME and add it to the PATH because for some reason is not being picked up
. ~/.bash_profile
~ / .bash_profile
получает из bash только при запуске в режиме входа в систему. Обычно это происходит, когда вы входите в систему с консоли ( Ctrl + Alt + F1 .. F6 ), подключаетесь через ssh или используйте sudo -i
или su -
для запуска команд от имени другого пользователя.
Когда вы входите в систему графически, ~ / .profile
будет определен сценарий, запускающий gnome-session (или любую другую среду рабочего стола, которую вы используете). Итак, ~ / .bash_profile
вообще не создается, когда вы входите в систему графически.
Когда вы открываете терминал, терминал запускает bash в интерактивном режиме (без входа в систему), что означает, что он будет исходить ~ / .bashrc
.
Правильное место для размещения этих переменных среды находится в ~ / .profile
, и эффект будет очевиден при следующем входе в систему.
Источник ~ / .bash_profile
из ~ / .bashrc
- неправильное решение. Предполагается, что все будет наоборот; ~ / .bash_profile
должен исходить из ~ / .bashrc
.
См. DotFiles для более подробного объяснения, включая некоторую историю того, почему это так .
(Кстати, при установке openjdk через apt символические ссылки должны быть настроены пакетом, так что вам действительно не нужно устанавливать JAVA_HOME
или изменять PATH
)
Думаю, стоит упомянуть, что вы можете изменить по умолчанию gnome-terminal использует оболочку входа в систему (например, bash -l) путем редактирования настроек профиля.
перейдите в меню «Правка» -> «Настройки профиля» -> вкладка «Заголовок и команда». отметьте опцию «Выполнить команду как оболочку входа в систему»
Вы можете проверить, запущена ли ваша оболочка Bash как оболочка входа, запустив:
shopt login_shell
Если ответ выключен
, вы не используете оболочку входа в систему.
Прочтите раздел руководства Bash о том, как Bash читает (или не читает) различные файлы конфигурации.
Выдержка из man bash
:
Когда bash вызывается как интерактивная оболочка входа или как неинтерактивная оболочка с опцией
- логин
, сначала она читает и выполняет команды из файла/ etc / profile
, если этот файл существует. После чтения этого файла он ищет~ / .bash_profile
,~ / .bash_login
и~ / .profile
, в указанном порядке, и читает и выполняет команды из первого, который существует и доступен для чтения.
su
с другой стороны также не запускает оболочку входа в систему по умолчанию, вы должны указать ей это сделать, используя - login
вариант.
TL; DR
В классической рекомендуемой настройке ubuntu, ~ /. bash_profile
оценивается только в определенных случаях. И это имеет смысл.
Поместите свои данные в ~ / .bashrc
, они будут оцениваться каждый раз.
Хорошо, я хочу понять, почему это имеет смысл?
Ключевые моменты чтобы понять, что происходит:
Итак, время «входа в систему» обычно:
ssh
,
поскольку оболочка будет отцом всего процесса, она загрузит ваш
~ / .bash_profile
. gnome-session
для классической Ubuntu) будет отвечать за чтение .profile
. Хорошо, а где разместить мои вещи?
Это довольно сложно, полная история здесь . Но вот сбег это довольно распространено для пользователей ubuntu. Итак, учитывая, что:
bash
, ~ / .bash_profile
и следуйте рекомендации , чтобы добавить
загрузка ~ / .bashrc
в ваш ~ / .bash_profile
, чтобы получить
по крайней мере один файл, который оценивается независимо от вызова
mecanism . Это быстрое предложение о том, где разместить вещи.
~ / .bashrc (Получает во всех случаях , если вы следуете рекомендациям)
Для переменной среды быстрой оценки и кода для вашей только для пользователей и только для bash использование командной строки (псевдонимы для пример). bashism приветствуются.
Он загружается на себя после:
bash
screen
new панель или вкладка. (не tmux
!) терминатор
/ gnome-terminal
...) если вы не ставите галочку
опция «запустить команду как оболочку входа». И она будет загружена во всех остальных случаях благодаря предыдущей рекомендации.
~ / .bash_profile (Получает только в конкретном случае ])
Для переменной среды с медленной оценкой и кода для процессов только для пользователя и консольный сеанс . Башизм приветствуются. Он загружается:
tmux
новая панель или окна (настройки по умолчанию), (не экран
]!) bash -l
, терминатор
/ gnome-terminal
...) только если поставить галочку
опция «запустить команду как оболочку входа в систему». ~ / .profile (Оценивается только в графическом сеансе)
Для переменных среды с медленной оценкой и с без- башизм для ваших процессов только для пользователя и всех графических сеансов . Это становится загружается при входе в систему в графическом интерфейсе пользователя.
Если вы открываете терминал или запускаете su
, оболочка выполняется не как оболочка входа в систему, а как обычная интерактивная оболочка. Таким образом, он читает ~ / .bashrc
, но не ~ / .bash_profile
. Вы можете запустить su
с параметром -l
, чтобы он запускал вашу оболочку как оболочку входа в систему.
Когда вы работаете с графическим интерфейсом, оболочка обычно никогда не запускается как оболочка входа в систему, так что обычно можно поместить все ваши вещи в ~ / .bashrc
.
Когда вы выполняете sudo su
, оболочка не выполняется, вместо этого попробуйте с помощью sudo su -
это загрузит ~ /. bash_profile
в качестве источника по умолчанию.