Подтвердить что ты не робот

Как загрузить файл ~/.bash_profile при вводе bash из zsh?

Я использовал bash в течение двух лет и просто попытался переключиться на оболочку zsh на своей ОС X через homebrew. И я установил свою оболочку по умолчанию (login) в zsh, и я подтвердил ее правильность, увидев, что при запуске моего терминала это оболочка zsh, которая используется по умолчанию.

Однако, когда я пытаюсь ввести оболочку bash из zsh, это выглядит как не загружая ~/.bash_profile, так как я не могу запустить свою команду с использованием псевдонимов, которая определена в моем ~/.bash_profile как alias julia="~/juila/julia" и т.д... Кроме того, приглашение не является тем, что я установил в файле, и вместо этого вернем bash-3.2$.

По некоторым причинам, когда я установил свою оболочку для входа в bash и введите zsh из bash, тогда ~/.zshrc загрузится правильно.

Итак, почему он не загружается, когда я запускаю bash из zsh? Мой ~/.bash_profile символически связан с ~/Dropbox/.bash_profile, чтобы синхронизировать его с другими моими компьютерами. Возможно, это вызывает проблему?

4b9b3361

Ответ 1

Интерактивный bash читает ваш ~/.bash_profile, если это оболочка для входа, или ваш ~/.bashrc, если он не является оболочкой входа.

Типичный .bash_profile будет содержать что-то вроде:

if [ -f ~/.bashrc ]; then . ~/.bashrc; fi

поэтому .bashrc может содержать команды, которые должны выполняться с помощью либо логинов, либо не входящих в систему.

Если вы запустите bash -l, а не только bash, он должен прочитать ваш .bash_profile.

Ссылка: https://www.gnu.org/software/bash/manual/html_node/Bash-Startup-Files.html

Ответ 2

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

if [ -f ~/.bash_profile ]; then 
    . ~/.bash_profile;
fi

Каждый раз, когда вы открываете терминал, он загружает все, что определено в ~/.bash_profile (если файл существует). При этом вы можете сохранить свои пользовательские настройки для zsh (цвета и т.д.). И вы можете сохранить свои пользовательские настройки оболочки в файле .bash_profile.

Это намного чище, чем использование bash -l IMO.

Если вы предпочитаете вводить свои настройки в .bashrc или .bash_login или .profile, вы можете сделать то же самое для них.

Ответ 3

Чтобы дополнить @Keith Thompson отличный ответ:

MacOS

Как @chepner делает это лаконично (внимание мое):

В OS X bash не используется как часть процесса входа в начальный [во время загрузки], а процесс Terminal.app(или других терминальных эмуляторов) существует вне любых ранее существовавших сеансов bash, поэтому каждое новое окно [или вкладка - чтение: интерактивная оболочка bash] (по умолчанию) рассматривает себя как новый сеанс входа.

В результате некоторые пользователи OSX только создавали ~/.bash_profile и никогда не беспокоятся о ~/.bashrc, потому что ВСЕ интерактивные оболочки bash являются командами входа в систему.

Linux

В Linux ситуация обычно отменяется: bash оболочки, созданные в интерактивном режиме, являются [интерактивными] оболочками NON-login, поэтому имеет значение ~/.bashrc.

В результате многие пользователи Linux имеют дело только с ~/.bashrc.


Чтобы поддерживать профили bash, которые работают на платформах BOTH, используйте технику @Keith Thompson:

  • Поместите свои определения (псевдонимы, функции,...) в ~/.bashrc
  • Добавьте следующую строку в ~/.bash_profile
[[ -f ~/.bashrc ]] && . ~/.bashrc

Ответ 4

Скопируйте содержимое из ~/.bash_profile и вставьте их в конец файла ~/.zshrc.

Ответ 5

Для пользователей ZSH на MacO я закончил с одним лайнером.

В самом низу ~/.zshrc я добавил следующую строку:

bash -l

Что он делает, просто загрузите настройки .bash_profile (псевдонимы, функции, экспорт $PATH,...)

Если вы решите избавиться от ZSH и вернуться к обычным BASH, вы вернетесь к нормальной жизни без каких-либо проблем.

Ответ 6

Если это то, что вы делаете нечасто, или просто не нужно вносить изменения, вы также можете "загрузить".bash_profile после запуска дочерней оболочки bash.

. ~/.bash_profile

Это приведет к настройкам, которые вы делаете в .bash_profile script для жизни этого сеанса оболочки. В большинстве случаев вы должны быть в состоянии повторить эту команду, так что это также простой способ проверить любые сделанные вами изменения без необходимости полного входа в систему, а также обновить все существующие сеансы оболочки, если вы делаете обновления в файлах .bash_profile &/или .bashrc.

Ответ 7

Недавно я установил oh-my-zsh в OS X и установил zsh в качестве оболочки по умолчанию и столкнулся с той же проблемой.
Я решил эту проблему, добавив source ~/.bash_profile в конец файла .zshrc.

Ответ 8

Для тех, кто только что установил zsh и хочет, чтобы их псевдоним из bash работал на zsh, сделайте следующее

  1. Откройте файл .zshrc в vim следующим образом

     vi ~/.zshrc
    
  2. Прокрутите вниз

  3. нажмите "i", чтобы включить режим записи
  4. Скажите zsh для загрузки элементов из bash_profile, когда это необходимо, так
    source ~/.bash_profile
    
  5. Пиши и выходи так
    :wq
    
  6. Обновите свой Zsh, как так
    source ~/.zshrc
    
    Это. Теперь все ваши сохраненные псевдонимы в .bash_profile будут готовы к использованию в zsh.