У меня есть виртуальная машина Ubuntu 11.04, и я хотел настроить среду разработки Java. Я сделал следующее:
sudo apt-get install openjdk-6-jdk
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)
Мне пришлось перейти к ~ / .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.
. Когда вы входите в графический интерфейс, ~/.profile будет определен с помощью сценария, который запускает gnome-session (или любую среду рабочего стола, которую вы используете). Таким образом, ~/.bash_profile не используется вообще при входе в систему графически.
Когда вы открываете терминал, терминал начинает работать в режиме (без входа в систему), что означает, что он будет источником ~/.bashrc.
Правильное место для размещения этих переменных среды находится в ~/.profile, и эффект должен появиться при следующем входе в систему.
Sourcing ~/.bash_profile из ~/.bashrc это неправильное решение. Это должно быть наоборот; ~/.bash_profile должен быть источником ~/.bashrc.
См. DotFiles для более подробного объяснения, включая некоторую историю того, почему это так.
(На боковой ноте при установке openjdk через apt, symlinks должен быть настроен пакетом, так что вам действительно не нужно устанавливать JAVA_HOME или изменить PATH)
Вы можете проверить, запущена ли ваша оболочка Bash в качестве оболочки входа:
shopt login_shell
Если ответ off, вы не используете оболочку входа.
Прочитайте раздел вызова руководства Bash о том, как Bash читает (или не читает) разные файлы конфигурации.
Выдержка из man bash:
Когда bash вызывается как интерактивный вход shell или как неинтерактивная оболочка с опцией --login, она сначала считывает и выполняет команды из файла /etc/profile, если этот файл существует. После прочтения этого файла он ищет ~/.bash_profile, ~/.bash_login и ~/.profile в этом порядке и считывает и выполняет команды из первого, который существует и доступен для чтения.su, с другой стороны, также не запускает оболочку входа по умолчанию, вы должны сказать ей это, используя опцию --login.
Я думаю, что стоит упомянуть, что вы можете изменить значение по умолчанию для gnome-terminal, чтобы использовать оболочку входа (т.е. bash -l), отредактировав настройки профиля.
перейдите в меню «Редактировать» -> «Настройки профиля» -> «Название и команда», установите флажок «Запустить команду как оболочку входа»
Если вы открываете терминал или запускаете su, оболочка не выполняется как оболочка входа, а как обычная интерактивная оболочка. Поэтому он читает ~/.bashrc, но не ~/.bash_profile. Вы можете запустить su с помощью опции -l, чтобы заставить ее запускать оболочку в качестве оболочки входа.
Когда вы работаете с графическим интерфейсом, оболочка обычно никогда не запускается в качестве оболочки входа, так что обычно отлично, чтобы поместить все вещи yout в ~/.bashrc.
TL; DR
В классической рекомендуемой настройке ubuntu ~/.bash_profile оценивается только в определенных случаях.
Поместите свои материалы в ~/.bashrc, он будет оцениваться каждый раз.
TL; DR
] Ключевые точки, чтобы понять, что происходит:
все процессы в linux имеют и используют переменные окружения. Переменные среды наследуются, поэтому их один раз отцом всего вашего процесса достаточно (особенно если для этого требуется некоторое время вычисления .) Отец всего вашего процесса, как правило, запускается после входа в систему на вашем устройстве (введите свои учетные данные). есть вещи, которые вы можете захотеть сделать только один раз, когда вы входите в систему на своем компьютере (например, проверьте новую почту ...).Таким образом, время входа в систему обычно:
все процессы в Linux имеют и используют переменные среды В графическом режиме, когда вы открываете сеанс, первый процесс (gnome-session для классического ubuntu) будет отвечать за чтение .profile.Хорошо, так где положить мои вещи?
Это довольно сложно, полная история здесь. Но вот прогон, который довольно распространен для пользователей ubuntu. Поэтому, учитывая это:
В графическом режиме, когда вы открываете сеанс, первый процесс (gnome-session для классического ubuntu) будет отвечать за чтение .profile. переменные среды наследуютсяЭто быстрое предложение о том, куда помещать вещи.
~ / .bashrc (Получает оценку во всех случаях, если вы следуете рекомендация). Для переменной среды и кода для быстрой оценки для вашего пользовательского использования и использования только командной строки bash (например, псевдонимы). багизм приветствуется. Он загружается на себя: создайте новое окно / панель оболочки в графических сеансах. вызывая bash screen новую панель или вкладку. (не tmux!) любой экземпляр bash в графическом клиенте консоли (terminator / gnome-terminal ...), если вы не отметили опцию «запустить команду в качестве оболочки входа». И он будет загружен во всех других случаях благодаря предыдущей рекомендации. ~ / .bash_profile (Получает оценку только в конкретном случае) Для переменной и кода среды с низкой оценкой для процессов только для пользователя и консоли. багизм приветствуется. Он загружается: вход в консоль (Ctrl-Alt F1), ssh для входа на этот компьютер, tmux новое окно или окна (настройки по умолчанию), (не screen!) Явные вызовы bash -l, любой пример bash в графический клиент консоли (terminator / gnome-terminal ...), только если вы отметите опцию «запустить команду в качестве оболочки входа». , поэтому их установка на отца всего вашего процесса достаточно (особенно если для этого требуется некоторое время вычисления.)