проблема
У меня есть виртуальная машина 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 и его дополнение к PATH никогда не выполнялись.
Решение
Я должен был пойти в ~ / .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_login или профиль в отсутствие этих двух выполняются первыми перед bashrc.
- Был ли в этом случае мой терминал оболочкой без авторизации ?
- Если так, то почему при выполнении su после терминала и введении пароля он не выполнял профиль, где я также установил экспорт, упомянутый выше?
.profile
должны быть получены только при входе в систему..profile
bash игнорирует их, если.bash_profile
существует. Смотрите мой ответ здесь иman bash
для более подробной информации..profile
.Вы можете проверить, запущена ли ваша оболочка Bash как оболочка для входа, выполнив:
Если
off
вы ответили, вы не используете оболочку входа в систему.Прочтите секцию вызова руководства Bash о том, как Bash читает (или не читает) различные файлы конфигурации.
Выдержка из
man bash
:su
с другой стороны, по умолчанию также не запускается оболочка входа в систему, вы должны указать ей сделать это, используя--login
опцию.источник
Я думаю, что стоит упомянуть, что вы можете изменить стандартное значение gnome-терминала для использования оболочки входа (например, bash -l), отредактировав настройки профиля.
перейдите в «Правка» -> «Настройки профиля» -> вкладка «Заголовок и команда» и установите флажок «Выполнить команду как оболочку входа»
источник
~/.bash_profile
оцениваете очень быстро, что, вероятно, имеет место. Хорошая вещь, чтобы проверить, состоит в том, чтобы преследовать любые вызовы другим процессам, которые обычно довольно дороги.Если вы открываете терминал или запускаете
su
оболочку, она выполняется не как оболочка входа в систему, а как обычная интерактивная оболочка. Так что читает,~/.bashrc
но нет~/.bash_profile
. Вы можете запуститьsu
с-l
возможностью заставить вашу оболочку работать как оболочка входа в систему.Когда вы работаете с графическим интерфейсом, оболочка обычно никогда не запускается как оболочка для входа в систему, поэтому обычно все, что вам нужно, это удобно
~/.bashrc
.источник
TL; DR
В классической рекомендуемой установке Ubuntu
~/.bash_profile
оценивается только в определенных случаях. И это имеет смысл.Положите ваши вещи
~/.bashrc
, это будет оцениваться каждый раз.Хорошо, я хочу понять, почему это имеет смысл?
Ключевые моменты, чтобы понять, что происходит:
Поэтому время входа в систему обычно:
ssh
нее, поскольку оболочка будет отцом всего процесса, она загрузит ваш~/.bash_profile
.gnome-session
для классической Ubuntu) будет отвечать за чтение.profile
.Хорошо, так, где положить мои вещи?
Это довольно сложно, полная история здесь . Но вот сбой, который довольно распространен для пользователей Ubuntu. Итак, учитывая, что:
bash
оболочку,~/.bash_profile
и следуйте рекомендациям добавить загрузку~/.bashrc
в ваш файл,~/.bash_profile
чтобы получить хотя бы один файл, который оценивается независимо от механизма вызова .Это быстрое предложение о том, куда положить вещи.
~ / .bashrc ( оценивается во всех случаях , если вы следуете рекомендации)
Для быстрой оценки переменной среды и кода для вашего пользователя-только и Баш только использование командной строки (псевдонимы, например). Башизм приветствуется.
Это загружается на себя на:
bash
screen
Новая панель или вкладка. (нетtmux
!)terminator
/gnome-terminal
...), если вы не отметили опцию «запустить команду как оболочку входа».И он будет загружен во всех других случаях благодаря предыдущей рекомендации.
~ / .bash_profile ( вычисляется только в конкретном случае )
Для медленной оценки переменной среды и код для вашего пользователя только и консольного сеанса процессов. Башизм приветствуется. Это загружается на:
tmux
новая панель или окна (настройки по умолчанию), (нетscreen
!)bash -l
,terminator
/gnome-terminal
...), только если вы отметили опцию «запускать команду как оболочка входа».~ / .profile (вычисляется только в графическом сеансе)
Для переменных среды с медленной оценкой и без башизма только для пользователя и всех графических процессов сеанса . Он загружается при входе в ваш графический интерфейс.
источник
.profile
если.bash_profile
он не существует.env
я не вижу установленных переменных env (я пытался закрыть iTerm и снова открыть). Но я заметил, что когда я установил Android studio и другие приложения, все эти env vars были включены/.bash_profile
. Поэтому, когда я добавил в/.bash_profile
него, работал как шарм. Почему это?