Чому Mac OS X не працює джерело ~ / .bashrc? [дублікат]


95

На це питання вже є відповідь тут:

Я знайшов багато людей, які з'ясовували, чому інструкція схожа на цю:

Put X to your ~/.bashrc and you can do Y

не працюють.

Завжди виявляється, що файли запуску bash Mac OS X (або сам Bash Bash) не містять файлу ~ / .bashrc ні в оболонці входу, ні в оболонці, породженій з віконної системи, як-от додаток Terminal в Mac OS X)

Чому це так, коли всі інші системи, схожі на Unix з Bash, з якими я працював раніше, робили це?

PS:

Я знайшов те, що сам Bash каже про файли запуску (що може бути корисним):

Коли Bash викликається як інтерактивна оболонка для входу, або як неінтерактивна оболонка з опцією --login, вона спочатку зчитує та виконує команди з файлу / etc / profile, якщо цей файл існує. Прочитавши цей файл, він шукає у такому порядку ~ / .bash_profile, ~ / .bash_login та ~ / .profile та зчитує та виконує команди з першого, який існує та читається. Параметр --noprofile може використовуватися, коли оболонка запускається для пригнічення такої поведінки.

Джерело: http://www.gnu.org/software/bash/manual/bashref.html#Bash-Startup-Files


Я також помітив, що ~/.bash_profileвиконується, але ні ~/.bashrc. Wierd.
igaurav

Відповіді:


90

В OSX термінал за замовчуванням запускає сеанс входу, тому читається .bash_profile тощо. (Процес входу в GUI, який запитує ваше ім’я та пароль, не використовує скрипти оболонки і не запускає оболонки; все робиться з запуску та робочої області)

На інших Unices xterm за замовчуванням виконує оболонку без входу, тому вони читають .bashrc як сценарії, які представляють вам ваш пароль і т. Д. Під час входу, викликають сеанс входу, і всі термінали є підпроцесом цього і успадковують середовище оболонки.

З документа GNU, на який ви посилалися

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

Коли запускається інтерактивна оболонка, яка не є оболонкою для входу, Bash зчитує та виконує команди з ~ / .bashrc, якщо цей файл існує. Це може бути пригнічено за допомогою параметра --norc. Параметр файлу --rcfile змусить Bash читати та виконувати команди з файлу замість ~ / .bashrc.

Отже, як правило, ваш ~ / .bash_profile містить рядок

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

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


7
Unicies = Unixes?
Пол Бревчинський

8
Ну Юнікси я мав в виду - я спиралася латинь в школі , так Видаляч форми множини - см en.wikipedia.org/wiki/Unix
user151019

8
... і 3 клас "Unixen" (хоча я віддаю перевагу
Unices

7
і четвертий "Єдинороги" ...
тинк

8
не будемо забувати нульову форму, тобто "євнухи"
smatthewenglish

19

bashчитає лише .bashrcдля оболонок без входу :

Коли запускається інтерактивна оболонка, яка не є оболонкою для входу, bash зчитує та виконує команди з ~ / .bashrc, якщо цей файл існує. Це може бути пригнічено за допомогою параметра --norc. Параметр файлу --rcfile змусить bash читати та виконувати команди з файлу замість ~ / .bashrc.

Оскільки термінал починається bashяк оболонка входу (запустіть, wщоб побачити, що bashекземпляри виконуються як -bash), .bashrcніколи не читається автоматично.


Отже, справа в тому, що додаток Termina в Mac OS X завжди створює "login" екземпляр bash? Чому? Якщо ви справді не входите в систему. (Ви раніше
увійшли

Чому інші системи Unix НЕ читають ~ / .bashrc?
Пол Бревчинський

3
Ніхто тут не в змозі пояснити дизайнерські рішення, прийняті Apple. Я міг легко сперечатися з обох сторін, але і це не допомагає. Тож просто прийміть це так, як це, мабуть, найкращий варіант
nohillside

Ну, це перший раз, коли ви запускаєте оболонку так само, як це - це вхід, у Unices на основі X11 ви починаєте з запуску оболонки, яка потім запускає X, щоб вона не була логіном
user151019

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