Обычно 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
команды.