У чому різниця між .bashrc, .bash_profile та .en Environment?


130

Я використовував декілька різних систем * на основі nix років, і, схоже, кожен аромат Bash, який я використовую, має різний алгоритм для визначення, які сценарії запуску використовувати. Для цілей таких завдань, як налаштування змінних та псевдонімів середовища та друк стартових повідомлень (наприклад, MOTD), який сценарій запуску є відповідним місцем для цього?

У чому різниця між наведення .bashrc, .bash_profileі .environment? Я також бачив інші файли , такі як .login, .bash_login, і .profile; вони завжди актуальні? У чому полягають відмінності, в яких вони запускаються під час фізичного входу в систему, віддаленого входу через ssh та відкриття нового вікна терміналу? Чи є суттєві відмінності між платформами (включаючи Mac OS X (і його Terminal.app) та Cygwin Bash)?

Відповіді:


73

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

Потім у вас є конфігураційні файли, які читаються "інтерактивними" оболонками (як, наприклад, ті, які підключені до терміналу (або псевдотерміналу у випадку, скажімо, емулятора термінала, що працює в системі вікон). Це ті, з іменами як .bashrc, .tcshrc, .zshrcі т.д.

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

[[ -r ~/.bashrc ]] && . ~/.bashrc

Інші оболонки поводяться по-різному - наприклад, з zsh, .zshrcзавжди читається для інтерактивної оболонки, будь то вхід у систему чи ні.

Сторінка керівництва по bash пояснює обставини, за яких читається кожен файл. Так, поведінка загалом узгоджується між машинами.

.profileпросто ім'я файлу сценарію входу, яке спочатку використовувалося /bin/sh. bash, будучи загалом сумісною із зворотною стороною /bin/sh, читатиметься, .profileякщо така існує.


48

Це просто. Це пояснено у man bash:

/bin/bash
       The bash executable
/etc/profile
       The systemwide initialization file, executed for login shells
~/.bash_profile
       The personal initialization file, executed for login shells
~/.bashrc
       The individual per-interactive-shell startup file
~/.bash_logout
       The individual login shell cleanup file, executed when a login shell exits
~/.inputrc
       Individual readline initialization file

Оболонки для входу - це ті, що зчитуються, коли ви входите (наприклад, вони не виконуються, наприклад, лише при запуску xterm). Є й інші способи входу. Наприклад, за допомогою диспетчера дисплеїв X. У них є інші способи зчитування та експорту змінних середовища в час входу.

Прочитайте також INVOCATIONрозділ у посібнику. У ньому йдеться "У наступних параграфах описано, як bash виконує свої файли запуску". , я думаю, що це пляма :) Це пояснює, що таке "інтерактивна" оболонка.

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


1
Чи можете ви додати, /etc/bashrcщоб заповнити відповідь?
Немоден

9

Класично ~/.profileвикористовується Борном Шеллом і, ймовірно, підтримується Башем як спадковий захід. Знову ж, ~/.loginі ~/.cshrcїх використовував C Shell - я не впевнений, що Bash їх взагалі використовує.

Використовували ~/.bash_profileб один раз, при вході в систему. ~/.bashrcСценарій читати кожен раз при запуску оболонки. Це аналогічно /.cshrcдля C Shell.

Одним із наслідків є те, що ~/.bashrcвхід повинен бути максимально легким (мінімальним), щоб зменшити накладні витрати при запуску оболонки без входу.

Я вважаю, що ~/.environmentфайл є файлом сумісності для Korn Shell.


7

Я знайшов інформацію про .bashrc і .bash_profile тут , щоб підвести підсумок:

.bash_profile виконується під час входу. Речі, які ви вводите, можуть бути вашими PATH та іншими важливими змінними середовища.

.bashrc використовується для оболонок без входу. Я не впевнений, що це означає. Я знаю, що RedHat виконує його щоразу, коли ви запускаєте іншу оболонку (су для цього користувача або просто знову викликаєте bash). Можливо, ви захочете вставити псевдоніми, але знову не знаю, що це означає. Я просто ігнорую це сам.

.profile - еквівалент .bash_profile для кореня. Я думаю, що ім’я змінено, щоб інші шкаралупи (csh, sh, tcsh) також використовували його. (він вам не потрібен як користувач)

Існує також .bash_logout, який виконується на, так, добре здогадуюся ... вихід. Можливо, ви захочете зупинити демонів або навіть трохи прибирати господарство. Ви також можете додати "очистити" там, якщо ви хочете очистити екран під час виходу.

Також є повне спостереження за кожним з файлів конфігурацій тут

Це, мабуть, навіть distro.-залежні, не всі дистрибутиви обирають мати кожен конфігуратор із собою, а деякі мають навіть більше. Але коли вони мають одне ім’я, вони зазвичай включають той самий зміст.


4

За словами Джоша Стайгера , Terminal.app Mac OS X насправді запускає оболонку входу, а не оболонку без входу за замовчуванням для кожного нового вікна терміналу, викликаючи .bash_profile замість .bashrc.

Він рекомендує:

У більшості випадків ви не хочете підтримувати два окремі конфігураційні файли для оболонки для входу та не входу в систему - коли ви встановлюєте PATH, ви хочете, щоб він застосовувався до обох. Ви можете виправити це за допомогою джерела .bashrc з вашого файлу .bash_profile, а потім помістити PATH та загальні налаштування в .bashrc.

Для цього додайте наступні рядки до .bash_profile:

if [ -f ~/.bashrc ]; then 
    source ~/.bashrc 
fi

Тепер, коли ви ввійдете на свою машину з консолі, буде викликано .bashrc.


2

Хорошим місцем для перегляду є сторінка чоловіка bash. Ось онлайн-версія. Шукайте розділ "ІНВОКАЦІЯ".


0

Я використовував дистрибутиви сімейства Debian, які, здається, виконують .profile, але ні .bash_profile, тоді як похідні RHEL виконуються .bash_profileраніше .profile.

Здається, що це безлад, коли вам доведеться налаштувати змінні середовища для роботи в будь-якій ОС Linux.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.