7

У меня есть псевдоним, который я добавил в .bashrc, и он активируется в терминале только после того, как я запускаю команду bash. Я чувствую, что должен знать, что здесь происходит, но я не знаю. :)

3 ответа3

5

От man bash:

Когда запускается интерактивная оболочка, которая не является оболочкой входа в систему , bash читает и выполняет команды из ~/.bashrc , если этот файл существует.

Акцент мой

В OS X все окна и вкладки терминала запускают оболочки входа в систему, что эквивалентно тому, что вы используете bash --login вместо bash . Поэтому ~/.bashrc игнорируется, если явно не указан source d, например, ~/.bash_profile:

Когда bash вызывается как интерактивная оболочка входа в систему, [...] он сначала читает и выполняет команды из файла /etc/profile , если этот файл существует. После прочтения этого файла он ищет ~/.bash_profile , ~/.bash_login и ~/.profile в указанном порядке, а также читает и выполняет команды из первой, которая существует и доступна для чтения.

Просто создайте ~/.bash_profile если он не существует, и добавьте следующую строку:

. .bashrc

Затем .bashrc будет загружен даже для сеансов входа в систему.

2

В зависимости от версии OS X используемая оболочка по умолчанию может не быть bash. Вы можете проверить это, набрав (перед запуском 'bash'):

$ echo $SHELL
/bin/zsh

Вы можете изменить оболочку по умолчанию на bash, чтобы вам не приходилось продолжать выполнение команды, следуя приведенным здесь инструкциям:

https://serverfault.com/questions/21044/how-do-i-change-a-users-default-shell-in-osx

От @ chopper3

для <= 10,4 - менеджер netinfo, /users /whoever /shell

для 10.5 => - SysPrefs, учетные записи, удерживая нажатой клавишу «Control», выберите дополнительные параметры, отредактируйте поле оболочки входа.

Чтобы далее ответить на ваш вопрос, .bashrc используется только оболочкой bash. Если вы хотите, вы можете выяснить, какую оболочку вы используете, и добавить псевдоним в .tcshrc или .zshrc вместо того, чтобы менять все, чтобы использовать bash.

Больше информации о том, что такое оболочка:

http://en.wikipedia.org/wiki/Shell_(computing)

и bash конкретно:

http://en.wikipedia.org/wiki/Bash_(Unix_shell)

1

Псевдоним не работает после запуска bash - он работает, когда вы запускаете bash .

По сути, ~/.bashrc - это файл, который содержит директивы, запускаемые bash каждом запуске. Оболочкой по умолчанию для всех последних версий Mac OS X является bash , поэтому она запускается каждый раз, когда вы открываете терминал. bash не знает, как перечитать свои файлы конфигурации при их редактировании, поэтому псевдоним не работает сразу, когда вы добавляете его в ~/.bashrc . Когда вы запускаете bash в своей существующей оболочке, вы создаете еще один экземпляр bash (который будет читать измененный файл конфигурации, потому что он запускается). Обратите внимание, что ваш первоначальный экземпляр bash все еще там, и работает за bash вы запускали вручную. Если вы закроете оболочку (с помощью команды exit ), вы вернетесь к своей исходной оболочке (если закроете ее, вы получите сообщение "процесс завершен" из терминала).

Итак, вернемся к вашей проблеме: ваш псевдоним не будет работать, пока bash перечитает свою конфигурацию. Вы можете сделать это, запустив bash снова (либо создав другую оболочку внутри существующей оболочки, запустив bash , либо закрыв и открыв свой терминал), либо вы можете использовать команду source чтобы получить bash для перечитывания файла. Итак, после того, как вы отредактировали ~/.bashrc , сделайте source ~/.bashrc - псевдоним работает, больше не запуская bash .

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