Я нашел много людей, выясняющих, почему инструкция похожа на эту:
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 .
В 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
он никогда не читается автоматически.
игауравсехрават
~/.bash_profile
выполняется, но не~/.bashrc
. странный.