Bash не загружает '.profile' в новом сеансе в Linux
Я настраиваю новую машину Linux, которую получил от нашего ИТ-отдела, и заметил, что .profileона не загружается, когда я запускаю новый сеанс терминала. Текущая оболочка - Bash , хотя я заменил ее на sh по умолчанию . Как мне заставить его загружаться .profileпри запуске?
Я получаю доступ к оболочке через SSH : ssh myusername@remotemachine. У меня есть права администратора.
Ответы
Когда Bash запускается как интерактивная оболочка входа в систему, одним из файлов, которые он может обрабатывать, является ~/.profile.
Когда он запускается как интерактивная оболочка без входа в систему, это не так. Он обрабатывает /etc/bash.bashrc(если этот файл или аналогичный файл включен в вашей версии Bash) и ~/.bashrc.
Вы можете добавить в свой следующее ~/.bashrc(но будьте осторожны, чтобы не повредить циклы или значения):
. $HOME/.profile
Это отчасти зависит от того, как вы запускаете свою оболочку. Как уже говорили другие, оболочка входа в систему загрузит ваш профиль (сначала она будет искать .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