Налаштуйте gnome-terminal для запуску bash як оболонки для входу, не читає .bashrc


24

Я намагаюся інтегрувати RVM з gnome-терміналом .

За замовчуванням, gnome-terminal не запускає bash як оболонку входу. Я ввімкнув, run command as a login shellяк було запропоновано у цій відповіді, про ту саму тему, що налаштовує RVM, але коли я це роблю, .bashrcфайл не читається.

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

Це очікувана поведінка?

Відповіді:


38

Так, така очікувана поведінка.

Коротше кажучи, поведінка така:

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

Прочитайте посібник bash про файли запуску для більш детальної інформації.

Особисто я вважаю, що така поведінка дивна, і я ще не знайшов раціоналізації для цього дизайнерського рішення.


Деякі пояснення термінології:

  • Інтерактивна оболонка є оболонкою , з якої ви можете взаємодіяти, це означає , що ви можете ввести в ньому команду. Більшість снарядів, які ви будете використовувати, - це інтерактивні мушлі.
  • Неінтерактивному оболонка є оболонкою , з якої ви не можете взаємодіяти. Сценарії оболонок працюють у неінтерактивних оболонках.
  • Ввійти оболонка є оболонкою , яка запускається при вході в систему.
  • Ні-Логін оболонки являє собою оболонку , яка запускається після процесу входу в систему .

Більшість оболонок, які ви бачите, - це інтерактивні незарядні оболонки . Це особливо вірно, якщо ви використовуєте таке графічне середовище, як gnome, оскільки тоді gnome - це "оболонка входу". Будь-який сеанс bash, розпочатий всередині gnome, є оболонкою без входу. Якщо ви хочете побачити справжню інтерактивну оболонку входу, перейдіть до віртуальної консолі (використовуючи Ctrl+Alt+F1), а потім увійдіть, використовуючи своє ім’я користувача та пароль. Це справжня інтерактивна оболонка bash bash. Ви можете повернутися до графічної оболонки за допомогою Ctrl+Alt+F7.

Існує параметр, --loginякий змусить bash поводитись так, ніби це оболонка для входу, навіть якщо запуститись після того, як ви увійшли в систему. Налаштування gnome-terminal для запуску bash як оболонки для входу означає, що він почне bash, використовуючи цю --loginопцію.


Зазвичай ви хочете, щоб баш завжди читався ~/.bashrcв інтерактивній оболонці. Ось як я рекомендую це зробити:

Створіть ~/.bash_profileфайл. Якщо bash запускається як оболонка для входу, його спочатку потрібно шукати, ~/.bash_profileперш ніж шукати ~/.profile. Якщо баш знайде, ~/.bash_profileто він не прочитає ~/.profile.

Поставте наступні рядки ~/.bash_profile:

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

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

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

і якщо bash запускається як інтерактивна оболонка без входу:

  1. ~/.bashrc

Ви повинні помістити речі, які є специфічними для bash, ~/.bashrcі речі, не специфічні для bash ~/.profile. Наприклад, PATHзаходить ~/.profileі HISTCONTROLзаходить ~/.bashrc.

Зауважте, що ~/.profileце не конкретно. Також читаються інші текстові оболонки (наприклад, sh або ksh) та графічні оболонки (gnome) ~/.profile. Ось чому не слід класти конкретні баш-речі ~/.profile.


1
+1. Дякую, це
підштовхувало

1
mywiki.wooledge.org/DotFiles пояснює деяку історію того, чому воно таке. Головною причиною цієї проблеми з rvm є те, що rvm ставить код, який повинен бути, в ~/.bashrcпершу чергу, у профілі. Помилка знаходиться на rvm.
geirha

Відповідно до @geirha вони повинні були використати~/.profile
sanmai

Обгрунтування полягає в тому, що сценарій профілю може контролювати оцінку .bashrcщодо того, що потрібно зробити. Якщо інтерактивна оболонка завжди читається, чи .bashrcповинна вона бути до чи після .profile? Що робити, якщо ви хочете встановити деякі речі, в .bashrcяких це .profileсприймається як належне? І в той же час ви хочете, щоб деякі речі .bashrcпокладалися на щось створене .profile? Жоден порядок завантаження не задовольняє обох сценаріїв.
Каз

11

Це не є поганим дизайнерським рішенням, ані помилкою, ані очікуваною поведінкою оболонок та клем

Це просто невдале значення за замовчуванням для параметра конфігурації для профілю в терміналі Gnome, яке ви можете легко виправити.

  1. Перейдіть до редагування -> Налаштування профілю .

  2. Виберіть вкладку Назва і Команда .

  3. Зверніть увагу, як прапорець Запустити як оболонку входу не знімається! Перевір це.

Це воно. Якщо ви зробите це для Defaultпрофілю або до того, що профіль налаштований для використання під час створення нових терміналів, ви отримаєте оболонку для входу.

Я здогадуюсь, що під кришкою ця опція, ймовірно, змушує передати цю -lопцію оболонці.


0

У мене виникло те саме питання, і я знайшов рішення: просто використовуйте 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

При використанні bash звичайно розміщувати ініціалізацію профілю в .bash_profile, який читається лише bash при вході, тоді як інші оболонки історично поділялися .profile. Це дозволяє розміщувати команди, характерні для bash .bash_profile.

Використовується наступне, як правило, для отримання псевдонімів, визначених у .bashrc:

# Get the aliases and functions
if [ -f ~/.bashrc ]; then
    . ~/.bashrc
fi
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.