Bash не загружает .profile в новом сеансе в Linux

44551
sa125

Я настраиваю новую машину Linux, которую я получил от нашего ИТ-отдела, и заметил, что .profileона не загружается, когда я начинаю новый сеанс терминала. Текущая оболочка - Bash, хотя я изменил ее по умолчанию на sh, с которым она шла. Как мне заставить его загружаться .profileпри запуске?

Я доступ к оболочке через SSH : ssh myusername@remotemachine. У меня есть права администратора.

14
Покажите нам свою команду, которую вы используете для запуска вашей оболочки. Nifle 14 лет назад 0

2 ответа на вопрос

21
Dennis Williamson

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

Когда он запускается как интерактивная оболочка без авторизации, это не так. Он обрабатывает /etc/bash.bashrc(если этот файл или аналогичный файл включен в вашей версии Bash) и ~/.bashrc.

Вы можете добавить следующее к своему ~/.bashrc(но будьте осторожны с непреднамеренным изменением циклов или значений):

. $HOME/.profile 
Если вы хотите, чтобы ваш источник .bashrc был вашим .profile (что я не рекомендую), вы должны быть осторожны против двойного источника. Установите некоторую защитную переменную или около того `[-z" $ SOME_VAR_SET_IN_PROFILE "] &&. ~ / .Profile` Rich Homolka 14 лет назад 8
Да, я тоже не очень рекомендую. Dennis Williamson 14 лет назад 2
Оболочка входа в систему попытается по порядку ~ / .bash_profile, ~ / .bash_login и ~ / .profile открыть только первый найденный файл. Beano 14 лет назад 12
Как уже говорили другие, это НЕ рекомендуется, так как обычным способом для профиля и «друзей» (.bash_profile) исходить .bashrc, а не другим способом. Возможно, ваша терминальная программа - это НЕ оболочка входа в систему, а интерактивная оболочка без входа в систему. Часто есть предпочтение, которое вы можете установить - сделать его оболочкой для входа в систему, чтобы получить .profile, .login и / или .bash_profile для выполнения. rholmes 8 лет назад 2
14
Rich Homolka

Это зависит от того, как вы запустите свою оболочку. Как уже говорили другие, оболочка входа в систему загрузит ваш профиль (сначала будет искать .bash_profile, а затем будет пытаться .profile). Если он находит один из них, он загружает их. Оболочка без регистрации (интерактивная или неинтерактивная) будет источником .bashrc.

Я бы посоветовал положить все в .bashrc. Разделение .profile / .bashrc было произвольным и имело больше смысла в старые времена UNIX, когда tty не было просто именем устройства и означало настоящий TeleType. Он предназначался для запуска определенных вещей (например, проверки почты) при «основном» входе в систему на сервере и просто обычной настройки для других оболочек. В большинстве Linux'ов вы сейчас авторизуетесь, на самом деле вы не входите в оболочку, поскольку вы входите в какой-то графический интерфейс (KDE, gnome, CDE 'shudder'). Менеджер сеансов теперь позаботится о "процессах входа в систему". Это гораздо менее актуально сейчас.

Мое предложение: сделать ваш .profile состоящим исключительно из:

[ -f $HOME/.bashrc ] && . $HOME/.bashrc 

как первая строка .bashrc, защититесь от странных вещей, происходящих при запуске bash-скрипта, выпрыгнув рано:

[[ $- != *i* ]] && return 
`.profile` должен быть независимым от bash. Я предлагаю настроить `.bash_profile` для загрузки` .profile`, а затем загрузить `.bashrc`. помещайте в `.profile` только вещи, не зависящие от bash, например,` PATH` и `LC_ *`. Поместите остальное в `.bashrc`. lesmana 13 лет назад 4
@Rich Homolka Почему [-f $ HOME / .bashrc] дважды в вашей команде? Чем команда, которую вы опубликовали, отличается от просто '. $ HOME / .bashrc '? David Doria 9 лет назад 0
Подсказка: не кладите ничего в ваш .bashrc, который пишет в stdout или stderr, так как это может сломать неинтерактивные клиенты для таких вещей, как SCP. Вещи с выводом (например, мне нравится, когда меня встречают печенье с предсказанием состояния и время безотказной работы) должны идти только в .profile / .bash_profile Brian A. Henning 8 лет назад 1
@Lotharyx верно. У нас был стандартный ish kshrc, который экспортировался в stdout, появился Xserver (hummingbird Превышение) Rich Homolka 8 лет назад 0