Сконфигурируйте gnome-терминал для запуска bash в качестве оболочки входа в систему, не читает .bashrc

Я пытаюсь интегрировать RVM с терминалом gnome .

По умолчанию gnome-терминал не запускает bash в качестве оболочки для входа. Я включил run command as a login shell, как предлагалось в , в этом ответе о той же теме, посвященной настройке RVM, но когда я делаю это, файл .bashrc не читается.

Например, я создаю переменную окружения в .bashrc, а затем, когда я запускаю новый терминал gnome, я не могу прочитать его. Мне нужно явно запустить source .bashrc, чтобы прочитать файл.

Это ожидаемое поведение?

24
задан 13 April 2017 в 15:23

4 ответа

Да, это - ожидаемое поведение.

Поведение, короче говоря, следующие:

  • удар запускается как интерактивная оболочка входа в систему: чтения ~/.profile
  • удар запускается как интерактивная оболочка невхода в систему: чтения ~/.bashrc

Прочитайте руководство удара о файлах запуска для получения дополнительной информации.

Лично, я думаю, что это поведение является странным, и я еще не нашел рационализацию для этого проектного решения.


Некоторое объяснение терминологии:

  • Интерактивная оболочка является оболочкой, с которой можно взаимодействовать, который означает, что можно ввести команды в ней. Большинство оболочек, которые Вы будете использовать, является интерактивными оболочками.
  • Неинтерактивная оболочка является оболочкой, с которой Вы не можете взаимодействовать. Сценарии оболочки выполняются в неинтерактивных оболочках.
  • Оболочка входа в систему является оболочкой, которая запускается, когда Вы входите в свою систему.
  • Оболочка невхода в систему является оболочкой, которая запускается после процесса входа в систему.

Большинство оболочек, которые Вы видите, является интерактивными оболочками невхода в систему. Это особенно верно при выполнении графической среды как гном потому что затем гном является "оболочкой входа в систему". Любая сессия удара запустилась, внутренний гном является оболочкой невхода в систему. Если Вы хотите видеть, что реальная интерактивная оболочка входа в систему затем переходит к виртуальной консоли (использование Ctrl+Alt+F1) и затем войдите в систему с помощью имени пользователя и пароля. Это - реальная интерактивная оболочка удара входа в систему. Можно вернуться к графическому использованию оболочки Ctrl+Alt+F7.

Существует опция --login который заставит удар вести себя, как будто это - оболочка входа в систему, даже если запущенный после Вашего вошли в систему. Конфигурирование терминала гнома для запуска удара как оболочки входа в систему означает, что запустит удар с помощью --login опция.


Обычно Вы хотите, чтобы удар всегда читал ~/.bashrc в интерактивной оболочке. Вот то, как я рекомендую сделать это:

Создайте a ~/.bash_profile файл. Если удар будет запущен как оболочка входа в систему, то он будет сначала искать ~/.bash_profile перед поиском ~/.profile. Если удар находит ~/.bash_profile затем это не будет читать ~/.profile.

Вставьте следующие строки ~/.bash_profile:

[ -f "$HOME/.profile" ] && source "$HOME/.profile"
[ -f "$HOME/.bashrc" ] && source "$HOME/.bashrc"

Теперь, если удар будет запущен как интерактивная оболочка входа в систему, то он считает следующие файлы:

  1. ~/.bash_profile
  2. ~/.profile
  3. ~/.bashrc

и если удар запускается как интерактивная оболочка невхода в систему:

  1. ~/.bashrc

Необходимо поместить материал, который является ударом, конкретным в ~/.bashrc и материал, который не является ударом, конкретным в ~/.profile. Например, PATH входит ~/.profile и HISTCONTROL входит ~/.bashrc.

Отметьте это ~/.profile не конкретный удар. Другие основанные на тексте оболочки (например, sh или ksh) и графические оболочки (гном) также чтение ~/.profile. Именно поэтому Вы не должны помещать, избивают определенный материал ~/.profile.

37
ответ дан 13 April 2017 в 15:23

Это ни плохое проектное решение, ни ошибка, ни ожидаемое поведение оболочек и терминалов

, Это - просто неудачное значение по умолчанию параметра конфигурации на профиль в Терминале Gnome, который можно легко починить.

  1. Переходят в Редактирование -> Предпочтения Профиля .

  2. Выбор вкладка Title и Command .

  3. Уведомление, как Команда выполнения как оболочка входа в систему флажок неконтролируем! Проверьте его.

Вот именно. Если Вы делаете это к эти Default, профиль, или к любому профилю настроен, чтобы использоваться при создании новых терминалов, Вы получаете оболочку входа в систему.

я предполагаю, что под капотом, эта опция, вероятно, заставляет это передавать -l опция к оболочке.

10
ответ дан 13 April 2017 в 15:23

Это характерно для при использовании удара для размещения инициализации профиля в .bash_profile, который только для чтения ударом на входе в систему, тогда как другие оболочки исторически совместно использовали .profile. Это позволяет Вам помещать определенные для удара команды в .bash_profile.

Использование следующего обычно делается для получения по запросу в псевдонимах, которые определяются в .bashrc:

# Get the aliases and functions
if [ -f ~/.bashrc ]; then
    . ~/.bashrc
fi
0
ответ дан 13 April 2017 в 15:23

Я имел тот же вопрос и нашел решение: Просто используйте 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. Используйте rvm :)

0
ответ дан 23 November 2019 в 01:19

Другие вопросы по тегам:

Похожие вопросы: