16

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

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

2 ответа2

21

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

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

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

. $HOME/.profile
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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .