Почему PATH определяется в ~/.profile, даже если запуск терминала с помощью bash выполняется только ~/.bashrc?
У меня есть 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 ответа
От man bash
:
Когда bash вызывается как интерактивная оболочка входа в систему или как неинтерактивная оболочка с параметром -login, она сначала читает и выполняет команды из файла / etc / profile, если этот файл существует. После прочтения этого файла он ищет ~ /.bash_profile, ~ /.bash_login и ~/.profile в указанном порядке, а также читает и выполняет команды из первой существующей и доступной для чтения....
Когда запускается интерактивная оболочка, которая не является оболочкой входа в систему, bash читает и выполняет команды из ~ /.bashrc, если этот файл существует....
Я это понимаю
~/.bashrc
: для интерактивной оболочки~/.bash_profile
,~/.bash_login
,~/.profile
: для входа в оболочку
Итак, если вам нужно изменить PATH
в терминале, который представляет собой интерактивную оболочку, то вы можете поместить это PATH
настройки в ~/.bashrc
; или, альтернативно, вы можете источник ~/.profile
от ~/.bashrc
всякий раз, когда вы находитесь в оболочке без входа в систему, например:
shopt -q login_shell || . ~/.profile
Почему PATH
установлен в ~/.profile
как рекомендуемый способ, я считаю, что пользователь определил PATH
должен быть установлен правильно, когда он / она входит в систему, и "логин" может быть bash
, zsh
или графический интерфейс, или несколько другое.
Senario 1: Некоторым пользователям может потребоваться не-X в качестве рабочей среды по умолчанию; и Х вызывается бегом startx
обычно или автоматически из ~/.profile
когда логин виртуального терминала tty7
,
[ -z $DISPLAY -a $XDG_VTNR -eq 7 ] && exec startx
В этом случае пользователи тщательно выбирают, что устанавливать в ~/.profile
, ~/.bashrc
, а также ~/.xinitrc
, чтобы они имели желаемый набор переменных окружения --- PATH
, EDITOR
, VISUAL
, BROWSER
и т. д.- работает ли он в:
- Консоли (Ctrl+Alt+F[1-6]) или вход без X через
ssh
:~/.profile
+~/.bashrc
- Нетерминальные программы в X:
~/.profile
+~/.xinitrc
- Эмуляторы терминала в X:
~/.profile
+~/.xinitrc
+~/.bashrc
Итак, настройка PATH
в ~/.profile
это лучший выбор. Пользователи могут установить EDITOR
как vim
в ~/.profile
(в не-X), но измените его на emacs
в ~/.xinitrc
(в X).
Senario 2: пользователь графического интерфейса, который входит в XFCE
вместо этого войдите как bash
; так PATH
может быть установлен в ~/.xsessionrc
как объяснено здесь.
Senario 3: A zsh
пользователь может установить PATH
в ~/.zprofile
, Интерактивные настройки для bash
места в ~/.bashrc
и интерактивные настройки для zsh
помещены в ~/.zshrc
,
~/.profile
выполняется при входе в систему в режиме консоли, а не в графическом режиме. Вы можете использовать ключи F1, F2 ...
войти, используя консольный режим.
Я всегда понимал, что .bashrc
специфичен для bash и .profile
это поперечная оболочка. Это не может быть проблемой для большинства домашних пользователей, но я иногда нахожусь в системе, где пользователи предпочитают ksh
(и применять этот выбор для новых пользователей). Если по какой-то причине вы получите борщевик, .profile
также используется. Обратите внимание, что zsh и csh не используют.profile.
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 обрабатывает конфигурации оболочки со ссылками, которые могут помочь.