Я настраиваю новую машину Linux, которую я получил от нашего ИТ-отдела, и заметил, что .profileона не загружается, когда я начинаю новый сеанс терминала. Текущая оболочка - Bash, хотя я изменил ее по умолчанию на sh, с которым она шла. Как мне заставить его загружаться .profileпри запуске?
Я доступ к оболочке через SSH : ssh myusername@remotemachine. У меня есть права администратора.
Покажите нам свою команду, которую вы используете для запуска вашей оболочки.
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