На этот вопрос уже есть ответ:
Когда я перезапускаю В Ubuntu 14.04 переменные среды возвращаются к значениям по умолчанию, и мне приходится каждый раз запускать source .bash_profile
, что очень раздражает. Обычно я храню переменные среды в .bash_profile
в домашнем каталоге, который находится в / home / buraktas
. Это текст файла:
### export JAVA_HOME variable
export JAVA_HOME=/usr/local/dev/jdk1.8.0_20
export PATH=$PATH:$JAVA_HOME/bin
### export M2_HOME
export M2_HOME=/usr/local/dev/maven
export PATH=$PATH:$M2_HOME/bin
### export SCALA_HOME
export SCALA_HOME=/usr/local/dev/scala-2.11.2
export PATH=$PATH:$SCALA_HOME/bin
Буду признателен за любой ответ.
TL; DR: Поместите Ваш export
команды в .profile
вместо этого, удалите или переименуйте .bash_profile
, и выйдите из системы и въезжайте задним ходом для применения изменений.
Большинство настольных сред настроено, по умолчанию, так, чтобы .profile
файл в Вашем корневом каталоге получен, когда Вы входите в систему графически. Это кажется на использование настольной среды Ubuntu по умолчанию которая является GNOME с Единицей. Это должно работать.
Большинство оболочек стиля Границы также получит .profile
, при вызове как оболочка входа в систему. Это включает удар, за исключением того, что .profile
получен только если .bash_profile
и .bash_login
не существовать. Если .bash_profile
существует, это будет использоваться; иначе, если .bash_login
существует, это будет использоваться; и иначе, .profile
используется.
Причина этого состоит в том так, чтобы команды, которые не зависят от оболочки, являющейся ударом, что Вы хотите работать на входе в систему, могли войти .profile
, и если существуют определенные для удара команды, можно поместить их в один из тех других двух файлов. Обычно Вы затем получали бы .profile
из .bash_profile
или .bash_login
.
Если единственные команды в .bash_profile
те, Вы показали в своем вопросе, затем Вы не должны использовать .bash_profile
вообще, потому что те команды являются портативными через оболочки стиля Границы. Можно затем удалить .bash_profile
(или переименуйте его к чему-то как .bash_profile.old
) и вставленный в те команды .profile
. Они могут пойти в самой нижней части того файла, и можно создать резервную копию его сначала, если Вам нравится (разумные названия резервного копирования могли бы быть .profile.old
или .profile.orig
, но можно назвать резервное копирование вообще, Вы хотите, потому что оно на самом деле не привыкает).
Отсутствие .bash_profile
- если .bash_login
также не существует - вызовет .profile
использоваться. (.profile
вероятно, уже используется для Вашего графического входа в систему.)
Удалите или переименуйте .bash_profile
.
Править .profile
. Это обычно похоже на это:
# ~/.profile: executed by the command interpreter for login shells.
# This file is not read by bash(1), if ~/.bash_profile or ~/.bash_login
# exists.
# see /usr/share/doc/bash/examples/startup-files for examples.
# the files are located in the bash-doc package.
# the default umask is set in /etc/profile; for setting the umask
# for ssh logins, install and configure the libpam-umask package.
#umask 022
# if running bash
if [ -n "$BASH_VERSION" ]; then
# include .bashrc if it exists
if [ -f "$HOME/.bashrc" ]; then
. "$HOME/.bashrc"
fi
fi
# set PATH so it includes user's private bin if it exists
if [ -d "$HOME/bin" ] ; then
PATH="$HOME/bin:$PATH"
fi
Можно просто добавить все одиннадцать строк кода (шесть, если Вы не считаете пустые строки и комментарии) к нижней части .profile
, сохраните файл, и выйдите из системы и въезжайте задним ходом.
Хотя это является совершенно дополнительным, Вы могли бы хотеть воспользоваться этой возможностью для рефакторинга Вашего export
операторы. В настоящее время Вы используете:
### export JAVA_HOME variable
export JAVA_HOME=/usr/local/dev/jdk1.8.0_20
export PATH=$PATH:$JAVA_HOME/bin
### export M2_HOME
export M2_HOME=/usr/local/dev/maven
export PATH=$PATH:$M2_HOME/bin
### export SCALA_HOME
export SCALA_HOME=/usr/local/dev/scala-2.11.2
export PATH=$PATH:$SCALA_HOME/bin
PATH
изменяется три раза, одно время друг для друга присваиваемая переменная. Это хорошо и могло бы быть тем, что Вы хотите. Но это дольше и (по-моему) меньше самодокументирует, чем эта альтернатива:
# export Java, Maven, and Scala homes and add their bins to PATH
export JAVA_HOME=/usr/local/dev/jdk1.8.0_20
export M2_HOME=/usr/local/dev/maven
export SCALA_HOME=/usr/local/dev/scala-2.11.2
export PATH=$PATH:$JAVA_HOME/bin:$M2_HOME/bin:$SCALA_HOME/bin
.bash_profile
Для Чего-то еще (но Вы, вероятно, не делаете),Я должен отметить, что то, что я рекомендовал, очень похоже на что-то c0rp, сказанный ранее (в комментарии к сообщению, которое было с тех пор удалено):
Поместите все переменные в
~/.profile
, и источник~/.profile
от~/.bash_profile
.~/.profile
выполняется автоматически DisplayManager во время настольной сессии процесса запуска, а также оболочкой входа в систему, когда каждый входит в систему от текстовой консоли.
Но моя рекомендация отличается по одному значительному уважению: так как это кажется мне, у Вас нет потребности в a .bash_profile
файл вообще, я рекомендую, чтобы Вы просто переместили его из пути (т.е. удалили или переименовали его), и не беспокоятся определением источника его в .profile
.
Если Вам действительно по некоторым причинам нужен a .bash_profile
файл, затем необходимо все еще постараться не иметь определения переменной среды в нем (поскольку они только применялись бы к логинам удара и не графическому входу в систему).
Если у Вас есть определенные для удара команды, которые должны войти в a .bash_profile
файл, затем как c0rp сказал, что можно вставить эту строку Ваш .bash_profile
файл:
. $HOME/.profile
Затем .bash_profile
получит .profile
и команды в .profile
будет выполнен и для удара и для логинов неудара.
.profile
Не работаетЗатем больше поиска и устранения неисправностей будет необходимо, но стоит отметить что:
.profile
по умолчанию; некоторые, по-видимому, не делают.Я услышал, что люди говорят, что LightDM не получает .profile
, и я думаю, что это верно, по крайней мере, поскольку это упаковывается в некоторых Ose. Я не могу говорить с вопросом абсолютно, но в системах Ubuntu я использовал с LightDM в качестве менеджера по оформлению, .profile
был получен на графических сессиях и переменном экспорте в .profile
были эффективными.
(Это не всегда работало на меня на других Ose, таких как Debian.)
.profile
Не работает: быстрая и грязная альтернативаЕсли Вы готовы иметь некоторое дублирование в своих определениях переменной, можно использовать .pam_environment
как быстрая альтернатива.
man pam_env
объясняет, что можно определить переменные среды как KEY=VAL
пары в envfiles. Как та страница справочника объясняет, envfile в масштабе всей системы по умолчанию /etc/environment
и envfiles в расчете на пользователя по умолчанию ~/.pam_environment
.
Так, Вы могли сделать a .pam_environment
файл в Вашем корневом каталоге и помещенный что-то вроде этого в него:
JAVA_HOME="/usr/local/dev/jdk1.8.0_20"
M2_HOME="/usr/local/dev/maven"
SCALA_HOME="/usr/local/dev/scala-2.11.2"
PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/usr/local/dev/jdk1.8.0_20/bin:/usr/local/dev/maven/bin:/usr/local/dev/scala-2.11.2/bin"
Как Вы видите, изменение чего-либо потребовало бы, чтобы Вы внесли несколько изменений, и этот высокий уровень дублирования мешает читать и понимать также. Вот почему я не рекомендовал этот путь сначала.
Самое простое и большая часть самодокументирования путь в Вашей ситуации должны определить и экспортировать Ваши переменные среды в .profile
как описано выше.
Статья EnvironmentVariables утверждает, что возможно изменить значение переменной среды и даже включать расширения других переменных среды, в .pam_environment
, с синтаксисом как PATH DEFAULT=${PATH}:${HOME}/MyPrograms
. Однако это кажется совершенно несовместимым с (более) официальной документацией, я попробовал ее на нескольких машинах без успеха, и я только когда-либо слышал о ней переставший работать для других также. Я сильно подозреваю, что автор (авторы) Wiki перепутал pam_env "envfile" синтаксис с pam_env "conffile" синтаксис (для использования терминов, используемых в man pam_env
). Надо надеяться, на днях кто-то найдет время для обнаружения наверняка, и затем Wiki может быть отредактирована (или для исправления или для разъяснения).
.bash_profile
Работы для этого в OS XOS X, одна из нескольких сред/систем, где конфигурация по умолчанию терминалов на ее графическом рабочем столе по умолчанию (т.е. экземпляры Terminal.app) должна запустить оболочку как оболочку входа в систему, а не как оболочка невхода в систему. (Cygwin - другой.)
Начиная с каждого экземпляра удара на OS X, запущенном непосредственно Terminal.app (если Вы не реконфигурировали вещи), действия как оболочка входа в систему, .bash_profile
получен.
Я подозреваю, что, за пределами сред получил доступ через Terminal.app (или неграфический вход в систему, такой как сессия SSH), экспорт в .bash_profile
не применяются также.
Основное отличие между OS X и Ubuntu когда дело доходит до .bash_profile
это:
В OS X оболочки, запущенные Terminal.app, запускаются как оболочки входа в систему. Так как удар является интерактивной оболочкой по умолчанию в OS X (начиная с OS X 10.3 или что-то), .bash_profile
получен, если это существует.
В Ubuntu при выполнении Терминала GNOME (или другой эмулятор терминала GUI) из графической сессии оболочка является запусками, обычно не оболочка входа в систему. Задачи, выполненные оболочкой входа в систему, обычно уже выполнялись (обычно менеджером по оформлению) для установки графической сессии, таким образом, идея состоит в том, что нет никакой потребности выполнить их снова.
Также немного странно запустить оболочку входа в систему, когда ничто вход в систему сходства не было сделано.