Да, это ожидаемое поведение.
Короче говоря, поведение выглядит следующим образом:
- bash запускается как интерактивная оболочка входа в систему: читает
~/.profile
- bash запускается как интерактивная оболочка без входа в систему: читает
~/.bashrc
Прочтите руководство bash о загрузочных файлах для более подробной информации.
Лично я думаю, что это поведение странно, и я еще не нашел обоснования для этого решения.
Некоторое объяснение терминологии:
- Интерактивная оболочка представляет собой оболочку , с которой вы можете взаимодействовать, это означает , что вы можете ввести в нем команду. Большинство используемых вами оболочек - это интерактивные оболочки.
- Неинтерактивная оболочка представляет собой оболочку , с которой вы не можете взаимодействовать. Скрипты оболочки запускаются внутри неинтерактивных оболочек.
- Войти оболочка является оболочкой , которая запускается при входе в систему.
- Не-Логин оболочки представляет собой оболочку , которая запускается после процесса входа в систему .
Большинство оболочек, которые вы видите, являются интерактивными оболочками без входа в систему . Это особенно верно, если вы используете графическое окружение, такое как gnome, потому что тогда gnome является «оболочкой для входа». Любая сессия bash, запущенная внутри gnome, является оболочкой без регистрации. Если вы хотите увидеть настоящую интерактивную оболочку входа в систему, перейдите на виртуальную консоль (используя Ctrl+Alt+F1
), а затем войдите в систему, используя свое имя пользователя и пароль. Это настоящая интерактивная оболочка bash для входа в систему. Вы можете вернуться к графической оболочке, используя Ctrl+Alt+F7
.
Есть опция, --login
которая заставит bash вести себя так, как будто это оболочка входа в систему, даже если она запущена после того, как вы вошли в систему. Настройка gnome-терминала для запуска bash в качестве оболочки входа в систему означает, что он запустит bash с помощью этой --login
опции.
Обычно вы хотите, чтобы bash всегда читал ~/.bashrc
в интерактивной оболочке. Вот как я рекомендую это сделать:
Создать ~/.bash_profile
файл. Если bash запускается как оболочка входа в систему, он сначала ищет, ~/.bash_profile
прежде чем искать ~/.profile
. Если bash находит, ~/.bash_profile
он не будет читать ~/.profile
.
Вставьте следующие строки в ~/.bash_profile
:
[ -f "$HOME/.profile" ] && source "$HOME/.profile"
[ -f "$HOME/.bashrc" ] && source "$HOME/.bashrc"
Теперь, если bash запущен как интерактивная оболочка входа, он будет читать следующие файлы:
~/.bash_profile
~/.profile
~/.bashrc
и если bash запускается как интерактивная оболочка без авторизации:
~/.bashrc
Вы должны поместить материал, специфичный для bash, ~/.bashrc
и материал, не специфичный для bash ~/.profile
. Например, PATH
входит ~/.profile
и HISTCONTROL
входит ~/.bashrc
.
Обратите внимание, что ~/.profile
это не относится к Bash. Другие текстовые оболочки (например, sh или ksh) и графические оболочки (gnome) также читаются ~/.profile
. Вот почему вы не должны помещать в Bash определенные вещи ~/.profile
.
~/.bashrc
первую очередь, в профиль. Ошибка на рвм.~/.profile
.bashrc
относительно того, что ему нужно делать. Если интерактивная оболочка всегда читает, это.bashrc
должно быть до или после.profile
? Что делать, если вы хотите настроить некоторые вещи,.bashrc
которые.profile
воспринимаются как должное? И в то же время вы хотите, чтобы некоторые вещи.bashrc
полагались на что-то созданное.profile
? Ни один из вариантов загрузки не удовлетворит оба сценария.Это не плохое дизайнерское решение, не ошибка и не ожидаемое поведение оболочек и терминалов.
Это просто неудачное значение по умолчанию параметра конфигурации для каждого профиля в терминале Gnome, которое вы можете легко исправить.
Перейдите в Edit -> Настройки профиля .
Выберите вкладку « Заголовок и команда ».
Обратите внимание, что флажок « Выполнить как оболочка входа» снят! Проверь это.
Вот и все. Если вы сделаете это с
Default
профилем или с тем профилем, который настроен для использования при создании новых терминалов, вы получите оболочку входа.Я предполагаю, что под капотом эта опция, вероятно, заставляет его передавать
-l
опцию в оболочку.источник
У меня был тот же вопрос, и я нашел решение: просто используйте SSH для реальной оболочки входа в систему!
1. В качестве суперпользователя создайте выделенного пользователя системы rvm для полной изоляции и назначьте пароль:
sudo su
useradd -m rvmuser
passwd rvmuser
2. Установите зависимости, чтобы rvm мог создавать рубины без запроса пароля суперпользователя:
apt-get install curl gawk libreadline6-dev libssl-dev libyaml-dev libsqlite3-dev sqlite3 autoconf libgdbm-dev libncurses5-dev automake bison libffi-dev
3. SSH в localhost для реальной оболочки входа (возможно, придется
apt-get install ssh
)ssh rvmuser@localhost
4. Установите rvm
\curl -sSL https://get.rvm.io | bash -s stable
5. Выйдите из системы и снова войдите в нее, чтобы загрузить все функции rvm.
exit
ssh rvmuser@localhost
6. Используйте рвм :)
источник
Обычно используется bash для размещения инициализации профиля
.bash_profile
, которая только для чтения bash при входе в систему, в то время как другие оболочки исторически делятся.profile
. Это позволяет вам помещать специфичные для bash команды.bash_profile
.Обычно используется следующее для получения псевдонимов, которые определены в
.bashrc
:источник