Bash не завантажує '.profile' у новому сеансі в Linux


22

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

Я доступ до оболонки через SSH : ssh myusername@remotemachine. У мене є права адміністратора.


Покажіть нам свою команду, яку ви використовуєте для запуску оболонки.
Ніфле

Відповіді:


24

Коли Bash запускається як інтерактивна оболонка для входу, один з файлів, який він може обробити, є ~/.profile.

Коли він починається як інтерактивна оболонка без входу, вона не працює. Він обробляє /etc/bash.bashrc(якщо цей файл чи подібний файл увімкнено у вашій версії Bash) та ~/.bashrc.

Ви можете додати до свого ~/.bashrc(але будьте обережні, якщо петлі чи значення змінюються ненавмисно):

. $HOME/.profile

8
Якщо у вас буде джерело .bashrc свого .profile (який я не рекомендую), ви повинні мати деяку охорону від подвійного пошуку. Встановіть деяку змінну варти або близько того [ -z "$SOME_VAR_SET_IN_PROFILE" ] && . ~/.profile
Rich Homolka

2
Так, я теж не рекомендую.
Призупинено до подальшого повідомлення.

12
Оболонка для входу спробує ~ / .bash_profile, ~ / .bash_login та ~ / .profile у порядку та відкриє лише першу, яку вона знайде.
Beano

3
Як вже говорили інші, це НЕ рекомендується, оскільки звичайний спосіб полягає у створенні профілю та "друзів" (.bash_profile) для створення джерела .bashrc, а не іншим способом. Можливо, ваша термінальна програма НЕ оболонка входу, а інтерактивна оболонка, яка не входить у систему. Часто є налаштування, яке можна встановити - зробити його оболонкою для входу, щоб отримати .profile, .login та / або .bash_profile для виконання.
rholmes

15

Це залежить від того, як ви запускаєте свою оболонку. Як говорили інші, оболонка для входу завантажить ваш профіль (спочатку буде шукати .bash_profile, потім спробує .profile). Якщо він знайде одне з них, він завантажує їх. Оболонка без входу (інтерактивна чи неінтерактивна) буде джерелом .bashrc.

Я б запропонував все вкласти в .bashrc. Розкол .profile / .bashrc був на зразок довільного і мав більше сенсу в старі часи UNIX, коли tty не було лише назвою пристрою і означало фактичний TeleType. Він мав на меті запустити певні речі (наприклад, перевірку пошти) на "головному" вході на сервер, а також просто звичайні настройки для інших оболонок. У більшості Linux-серверів ви зараз увійдете в систему, ви насправді не входите в оболонку, оскільки ви входите в якийсь графічний інтерфейс (KDE, gnome, CDE "здригання"). Про "нерестові процеси входу" тепер опікується ваш менеджер сеансів. Зараз це набагато менш актуально.

Моя пропозиція. Зробіть .profile складатися виключно з:

[ -f $HOME/.bashrc ] && . $HOME/.bashrc

як перший рядок .bashrc, захищайте від дивних речей, що виникають під час запуску баш-сценарію, вискокуючи рано:

[[ $- != *i* ]] && return

5
.profileслід тримати балгічний агностик. Я пропоную налаштувати .bash_profileна завантаження, .profileа потім на завантаження .bashrc. поміщайте лише баш-агностичні речі .profile, як, PATHі такі LC_*речі Покладіть решту .bashrc.
lesmana

@Rich Homolka Чому [-f $ HOME / .bashrc] у вашій команді двічі? Чим команда, яку ви розмістили, відрізняється від просто ". $ HOME / .bashrc '?
Девід Дорія

1
Підказка: Не вкладайте нічого у свій .bashrc, що пише в stdout або stderr, оскільки це може зламати неінтерактивних клієнтів для таких речей, як SCP. Речі з результатами (наприклад, я люблю вітатися з файлом cookie fortune та безперервного часу), слід запускати лише .profile / .bash_profile
Брайан А. Хеннінг

@Lotharyx правда. У нас був стандартний іш kshrc, який експортував у stdout, вибухнув Xserver (колібрі перевищують)
Rich Homolka
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.