Как настроить среду, не используя каждый раз источник .bash_profile? [дубликат]

Когда я перезапускаю В 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

Буду признателен за любой ответ.

5
задан 4 October 2014 в 08:17

1 ответ

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 по умолчанию; некоторые, по-видимому, не делают.
  • Это может также зависеть от настольной среды (которым я имею в виду, на на - DE профили сессии, которые говорят DM, как запустить графическую сессию).

Я услышал, что люди говорят, что 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 X

OS 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) из графической сессии оболочка является запусками, обычно не оболочка входа в систему. Задачи, выполненные оболочкой входа в систему, обычно уже выполнялись (обычно менеджером по оформлению) для установки графической сессии, таким образом, идея состоит в том, что нет никакой потребности выполнить их снова.

    Также немного странно запустить оболочку входа в систему, когда ничто вход в систему сходства не было сделано.

3
ответ дан 17 November 2019 в 11:54

Другие вопросы по тегам:

Похожие вопросы: