Обычно bash предоставляет исходный файл сценария запуска ~/.bashrc для интерактивных оболочек, не входящих в систему .
Обычно bash исходный файл сценария запуска ~/.profile для интерактивных оболочек входа в систему .
Обычно Terminal.app рассматривает новые окна терминала как интерактивные оболочки входа в систему .
Таким образом, в обычных условиях только ваш ~/.profile будет прочитан и выполнен; ваш ~/.bashrc никогда не читается и не выполняется.
Чтобы решить эту проблему, я обычно создаю сценарий запуска оболочки с именем ~/.profile (если он еще не существует) и добавляю в этот файл следующую команду, чтобы он проверял, существует ли файл ~/.bashrc , и он получает его (читает и выполняет в текущем процессе оболочки, а не в подоболочке), если он существует:
test -f ~/.bashrc && source ~/.bashrc
Перефразируя в соответствии с просьбой: приложение терминала Mac OS X обычно запускает вашу оболочку (bash) в режиме "входа". Когда bash запускается в режиме входа в систему, он не читает / не выполняет ~/.bashrc . Вместо этого он читает и выполняет ~/.profile . Если вы хотите поместить вещи в ваш ~/.bashrc чтобы они читались и выполнялись в каждом новом окне терминала, вам нужно создать файл сценария оболочки с именем ~/.profile , и этот файл содержит команду, которая ищет ваш ~/.bashrc и читает и выполняет его.
В случае, если глагол "источник" сбил вас с толку: "источник" файла сценария оболочки - это когда оболочка (например, bash) читает команды оболочки из файла и запускает эти команды в текущем процессе оболочки, поэтому они влияют на среду текущий процесс оболочки. Обычно другие файлы сценариев оболочки, которые вы пишете, не поставляются ; вместо этого они выполняются в под-оболочке (отдельный экземпляр или копия bash) и не могут ничего изменить в среде родительской оболочки (основной экземпляр bash который был запущен при открытии нового окна терминала). ).
Чтобы получить оболочку для исходного сценария, вы используете команду source , которая встроена в оболочку. Ярлык для source команды . (да, просто точка / точка / символ полной остановки). В предыдущей версии этого ответа я использовал . оператор вместо source команды.