Так, така очікувана поведінка.
Коротше кажучи, поведінка така:
- 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 запускається як інтерактивна оболонка для входу, він буде читати наступні файли:
~/.bash_profile
~/.profile
~/.bashrc
і якщо bash запускається як інтерактивна оболонка без входу:
~/.bashrc
Ви повинні помістити речі, які є специфічними для bash, ~/.bashrc
і речі, не специфічні для bash ~/.profile
. Наприклад, PATH
заходить ~/.profile
і HISTCONTROL
заходить ~/.bashrc
.
Зауважте, що ~/.profile
це не конкретно. Також читаються інші текстові оболонки (наприклад, sh або ksh) та графічні оболонки (gnome) ~/.profile
. Ось чому не слід класти конкретні баш-речі ~/.profile
.