Почему в Mac OS X нет исходного кода ~ / .bashrc? [Дубликат]


95

На этот вопрос уже есть ответ здесь:

Я нашел много людей, выясняющих, почему инструкция похожа на это:

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

не работает

Всегда получается, что загрузочные файлы bash в Mac OS X (или сам Bash в Mac) не содержат файл ~ / .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, запрашивающий ваше имя и пароль, не использует сценарии оболочки и не запускает оболочку, все это выполняется из launchd и рабочей области)

В других Unix xterm по умолчанию запускает оболочку, не входящую в систему, поэтому они читают .bashrc, поскольку сценарии, которые предоставляют вам ваш пароль и т. Д. При входе в систему, вызывают сеанс входа в систему, и все терминалы являются подпроцессом этого процесса и наследуют среду оболочки.

Из документа GNU, на который вы ссылались

Вызывается как интерактивная оболочка без авторизации

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

Итак, обычно ваш ~ / .bash_profile содержит строку

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

после (или до) любых специфичных для входа инициализаций.


7
Unicies = Unixes?
— Павел Бревчински

8
Ну юниксы я имел в виду - я опиралась латынь в школе , так Удалитель формы множественного числа - см en.wikipedia.org/wiki/Unix
— user151019

8
... и 3-й класс "Unixen" (хотя я предпочитаю Unices)
— earcam

7
и четвертый "Единороги" ...
— Тинк

8
давайте не будем забывать нулевую форму, то есть "евнухи"
— smatthewenglish

19

bashчитает только .bashrcдля не-логинов :

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

Поскольку Терминал запускается bashкак оболочка входа в систему (запускается, wчтобы увидеть, что bashэкземпляры выполняются как -bash), .bashrcникогда не читается автоматически.


Итак, смысл в том, что приложение Termina в Mac OS X всегда создает экземпляр bash для входа в систему? Почему ? Если вы действительно не авторизуетесь. (У вас есть логин ранее из GUI)
— Paul Brewczynski

Почему другие системы unix читают ~ / .bashrc?
— Павел Бревчински

3
Никто здесь не в состоянии объяснить дизайнерские решения, принятые Apple. Я легко могу поспорить с обеими сторонами, но это тоже не поможет. Так что просто примите это, как это, вероятно, лучший вариант
— nohillside

Что ж, это первый раз, когда вы запускаете оболочку от имени пользователя, то есть для входа в систему, в Unix на основе X11 вы запускаете оболочку, которая затем запускает X, так что это не логин
— user151019

@PaulBrewczynski Ну, в Linux есть вызов из .bash_profile в .bashrc.
— Пол Стелиан
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.