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

Aug 16 2010

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

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

Ответы

24 Pauseduntilfurthernotice. Aug 16 2010 at 14:38

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

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

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

. $HOME/.profile
16 RichHomolka Aug 16 2010 at 17:28

Это отчасти зависит от того, как вы запускаете свою оболочку. Как уже говорили другие, оболочка входа в систему загрузит ваш профиль (сначала она будет искать .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