У меня есть guest учетная запись в моей системе Debian с рабочим столом XFCE.

Он имеет файл ~/.profile добавленный по умолчанию. Последние несколько строк этого файла:

# set PATH so it includes user's private bin if it exists
if [ -d "$HOME/bin" ] ; then
    PATH="$HOME/bin:$PATH"
fi

echo .profile executed

Последняя команда echo добавлена мной. Я гарантировал, что $HOME/bin существует.

guest@debian:~$ ls -ld $HOME/bin
drwxr-xr-x 2 guest guest 4096 Jan  9 09:42 /home/guest/bin

После загрузки моей системы Debian я захожу на рабочий стол XFCE, используя guest учетную запись, и запускаю терминал (xfce4-терминал). Но я не вижу никаких доказательств того, что ~/.profile был выполнен.

guest@debian:~$ echo $PATH
/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games

man bash ясно дает понять, что ~/.profile читается и выполняется в интерактивной оболочке входа в систему или неинтерактивной оболочке с параметром --login . ~/.bashrc выполняется в интерактивной оболочке, не входящей в систему, поэтому вполне нормально, что когда xfce4-терминал запускает bash, ~/.profile не выполняется.

Если ~/.profile не выполняется при запуске нового Терминала, почему PATH обновляется в ~/.profile?

Разве Debian не должен предоставлять обновление PATH в ~/.bashrc чтобы оно было доступно пользователю, когда пользователь запускает терминал?

4 ответа4

0

~/.profile выполняется, когда вы входите в систему в режиме консоли, а не в графическом режиме. Вы можете использовать клавиши F1, F2 ... для входа в режиме консоли.

0

Edit -> Profile Preferences -> Title and Command -> "Run command as a login shell"

Обычный ~/.profile загружает ~/.bashrc если он доступен, если - при условии, что $BASH_VERSION присутствует в вашей среде.

Имейте в виду, что ~/.profile игнорируется, если в вашем доме есть ~/.bash_profile или ~/.bash_login и что в результате его игнорирования ~/.bashrc тоже не получен.

Этот ответ был получен отсюда во время исследования аналогичной проблемы. И в этом ответе Unix & Linux упоминается, как Debian обрабатывает конфигурации оболочки со ссылками, которые могут помочь.

0

От man bash:

Когда bash вызывается как интерактивная оболочка входа в систему или как неинтерактивная оболочка с параметром -login, она сначала читает и выполняет команды из файла /etc/profile, если этот файл существует. После прочтения этого файла он ищет ~/.bash_profile, ~/.bash_login и ~/.profile в указанном порядке, а также читает и выполняет команды из первой существующей и доступной для чтения ....

Когда запускается интерактивная оболочка, которая не является оболочкой входа в систему, bash читает и выполняет команды из ~/.bashrc, если этот файл существует ....

Я это понимаю

  1. ~/.bashrc: для интерактивной оболочки
  2. ~/.bash_profile , ~/.bash_login , ~/.profile: для оболочки входа

Итак, если вам нужно изменить PATH в терминале, который является интерактивной оболочкой, вы можете поместить эти настройки PATH в ~/.bashrc ; или, альтернативно, вы можете использовать ~/.profile из ~/.bashrc когда вы находитесь в оболочке, не входящей в систему, например:

shopt -q login_shell || . ~/.profile

Что касается того, почему PATH устанавливается в ~/.profile как рекомендуемый способ, я считаю, что определяемый пользователем PATH должен быть установлен правильно, когда он / она входит в систему, а "login" может быть bash , zsh или GUI или каким-то другим образом.

Senario 1: Некоторым пользователям может потребоваться не-X в качестве рабочей среды по умолчанию; и X вызывается запуском startx нормально или автоматически из ~/.profile когда виртуальным терминалом входа является tty7 .

[ -z $DISPLAY -a $XDG_VTNR -eq 7 ] && exec startx

В этом случае пользователи тщательно выбирают, что устанавливать в ~/.profile , ~/.bashrc и ~/.xinitrc , чтобы у них был желаемый набор переменных окружения - PATH , EDITOR , VISUAL , BROWSER и т.д. --- работает ли он / она в:

  1. Консоли (Ctrl+Alt+F [1-6]) или вход без X через ssh: ~/.profile + ~/.bashrc
  2. Нетерминальные программы в X: ~/.profile + ~/.xinitrc
  3. Эмуляторы терминала в X: ~/.profile + ~/.xinitrc + ~/.bashrc

Таким образом, установка PATH в ~/.profile - лучший выбор. Пользователи могут установить EDITOR как vim в ~/.profile (в не-X), но изменить его на emacs в ~/.xinitrc (в X).

Senario 2: пользователь графического интерфейса, который входит в XFCE а не входит в систему как bash ; поэтому PATH может быть установлен в ~/.xsessionrc как описано здесь.

Senario 3: Пользователь zsh может установить PATH в ~/.zprofile . Интерактивные настройки для bash находятся в ~/.bashrc , а интерактивные настройки для zsh - в ~/.zshrc .

0

Я всегда понимал, что .bashrc специфичен для bash, а .profile - это кросс-оболочка. Это не может быть проблемой для большинства домашних пользователей, но я иногда нахожусь в системе, где пользователи предпочитают ksh (и применяют этот выбор для новых пользователей). Если по какой-то причине вы получаете bournshell, также используется .profile . Обратите внимание, что zsh и csh не используют .profile.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .