В Linux я вполне могу добавить псевдоним в bashrc, и он станет постоянным псевдонимом. В Mac OS я пытался сделать то же самое:

vim ~/.bashrc

export PATH="$PATH:$HOME/.rvm/bin" # Add RVM to PATH f  or scripting
alias prj="cd ~/Documents/projects"

### Added by the Heroku Toolbelt
export PATH="/usr/local/heroku/bin:$PATH"

При этом я получил это:

$ alias
alias rvm-restart='rvm_reload_flag=1 source '\''/Users/alex/.rvm/scripts/rvm'\'''

Так где же мой prj псевдоним? Я перезагрузил ноутбук, но ничего не изменилось.

$ cat ~/.profile

export PATH="$PATH:$HOME/.rvm/bin" # Add RVM to PATH for scripting
test -f ~/.bashrc && source ~/.bashrc

$ cat ~/.bashrc
export PATH="$PATH:$HOME/.rvm/bin" # Add RVM to PATH f  or scripting
alias prj="cd ~/Documents/projects"

### Added by the Heroku Toolbelt
export PATH="/usr/local/heroku/bin:$PATH"

2 ответа2

2

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

0

Вы открыли новое окно терминала или запустили source ~/.bashrc после редактирования? Текущий терминал должен быть обновлен для путей / псевдонимов.

$ vim ~/.bashrc
alias prj='cd ~'
:x
$ alias
$ alias rvm-restart='rvm_reload_flag=1 source '\''/Users/dx072/.rvm/scripts/rvm'\'''
$ source ~/.bashrc
$ alias
$ alias prj='cd ~'
  alias rvm-restart='rvm_reload_flag=1 source '\''/Users/dx072/.rvm/scripts/rvm'\'''

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .