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

22

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

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

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

Ответы:

24

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

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

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

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

Это зависит от того, как вы запустите свою оболочку. Как уже говорили другие, оболочка входа будет загружать ваш профиль (сначала будет искать .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
Рич Гомолка
источник
5
.profileдолжен быть сохранен Bash-агностиком. Я предлагаю настроить .bash_profileдля загрузки, .profileа затем загрузить .bashrc. положить только вещи .profile, не связанные с Bash , как PATHи LC_*вещи. Положите остальные .bashrc.
Lesmana
@Rich Homolka Почему [-f $ HOME / .bashrc] дважды в вашей команде? Чем команда, которую вы опубликовали, отличается от просто '. $ HOME / .bashrc '?
Дэвид Дория
1
Подсказка: не помещайте ничего в ваш .bashrc, который пишет в stdout или stderr, так как это может сломать неинтерактивные клиенты для таких вещей, как SCP. Вещи с выходными данными (например, мне нравится, когда меня встречают печенье с предсказанием состояния и время безотказной работы) должны идти только в .profile / .bash_profile
Брайан А. Хеннинг,
@Lotharyx верно. У нас был стандартный ish kshrc, который экспортировался в stdout, вышел Xserver (превышение колибри)
Rich Homolka