Почему Mac OS X не использует источник ~/.bashrc? [дубликат]

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

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

не работай.

Всегда оказывается, что загрузочные файлы Mac OS X bash (или сам Mac 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. странный.

Ответы (2)

В OSX терминал по умолчанию запускает сеанс входа в систему, поэтому читает .bash_profile и т. Д. (Процесс входа в систему с графическим интерфейсом, который запрашивает ваше имя и пароль, не использует сценарии оболочки и не запускает оболочку, все это делается из запуска и рабочей области)

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

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

Вызывается как интерактивная оболочка без входа в систему

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

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

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

после (или до) любой инициализации, связанной с входом в систему.

bashчитается только .bashrcдля оболочек без входа в систему:

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

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

Итак, дело в том, что приложение Termina в Mac OS X всегда создает «логин» экземпляра bash? Почему ? Если вы действительно не входите в систему. (Вы вошли в систему ранее из графического интерфейса)
Ну, это первый раз, когда вы запускаете оболочку как вы, так что это логин, в Unices на основе X11 вы начинаете с запуска оболочки, которая затем запускает X, так что это не логин.