Почему 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 обрабатывает конфигурации оболочки со ссылками, которые могут помочь.