Как загрузить ~/.профиль bash при входе в bash из zsh?
я использовал bash в течение двух лет и просто пытался переключиться на zsh shell на моей OS X через homebrew. И я установил оболочку по умолчанию (login) в zsh, и я подтвердил, что она установлена правильно, увидев, что когда я запускаю свой терминал, это оболочка zsh, которая используется по умолчанию.
однако, когда я пытаюсь войти в оболочку bash из zsh, похоже, что она не загружается ~/.bash_profile, Так как я не могу запустить свою команду, используя псевдонимы, которые определены в my ~/.bash_profile Как alias julia="~/juila/julia", etc.. Кроме того, приглашение не что я установил в файле и вместо этого возвращаю bash-3.2$.
по некоторым причинам, когда я установил свою оболочку входа в bash и ввел zsh изнутри bash, то ~/.zshrc правильно загружена.
так почему же он не загружается всякий раз, когда я запускаю bash изнутри zsh? Мой ~/.bash_profile символически связан с ~/Dropbox/.bash_profile для синхронизации с другими компьютерами. Может быть, это вызывает проблему?
7 ответов
интерактивный bash читает ~/.bash_profile если это оболочка, или ~/.bashrc если это не оболочка.
типичный .bash_profile будет содержать что-то вроде:
if [ -f ~/.bashrc ]; then . ~/.bashrc; fi
так .bashrc может содержать команды, выполняемые оболочками login или non-login.
если вы запустите bash -l а не просто bash, Это следует читать как .bash_profile.
ссылка: https://www.gnu.org/software/bash/manual/html_node/Bash-Startup-Files.html
чтобы дополнить отличный ответ @Keith Thompson:
macOS:
As @chepner ставит его кратко (выделено мной):
в OS X bash не используется как часть начального процесса входа [во время загрузки] и терминала.процесс приложения (или других эмуляторов терминалов) существует вне любых ранее существовавших сеансов bash, поэтому каждое новое окно [или вкладка-read: interactive bash shell] (по умолчанию) рассматривает себя как новый сеанс входа.
в результате некоторые пользователи OSX только когда-либо создать ~/.bash_profile, и никогда не заморачивались с ~/.bashrc, потому что все интерактивные оболочки bash являются логин снарядов.
Linux:
в Linux ситуация обычно отменено: 
bash оболочки, созданные в интерактивном режиме, являются [интерактивными]не-логин снаряды, так это ~/.bashrc что вопросы.
в результате многие пользователи Linux имеют дело только с ~/.bashrc.
сохранить профили bash, которые работают на обеих платформах, используйте технику @Keith Thompson упоминает:
- Поместите свои определения (псевдонимы, функции, ...) in 
~/.bashrc - добавьте следующую строку в 
~/.bash_profile 
[[ -f ~/.bashrc ]] && . ~/.bashrc
открыть ~/.zshrc и в самом низу файла добавьте следующую строку:
if [ -f ~/.bash_profile ]; then 
    . ~/.bash_profile;
fi
каждый раз, когда вы открываете терминал, она будет загружать все, что определено в ~/.bash_profile (Если файл уже существует). С помощью этого вы можете сохранить свои пользовательские настройки для zsh (цвета, и т. д.). И вы можете сохранить свои пользовательские настройки оболочки в . 
это намного чище, чем при использовании bash -l ИМО. 
если вы предпочитаете ставить свои настройки в .bashrc, или .bash_login или .profile, вы можете сделать то же самое для них. 
для пользователей ZSH на MacOs я закончил с одним лайнером.
в самом низу ~/.zshrc я добавил следующую строку :
bash -l
что он делает, это просто загрузить .файл настройки (псевдонимы, функции, экспорт $PATH,...)
Если вы решите избавиться от ZSH и вернуться к plain BASH, вы вернетесь к нормальной жизни без каких-либо хлопот.
Если это то, что вы делаете нечасто, или просто не подходит для внесения изменений, вы также можете "источник".файл после запуска дочерней оболочки bash.
. ~/.bash_profile
Это будет тянуть в настройки .файл скрипт для жизни этого сеанса оболочки. В большинстве случаев вы должны иметь возможность повторить эту команду, так что это также простой способ проверить любые изменения, которые вы делаете без необходимости делать полный вход, а также обновите все существующие сеансы оболочки, если вы сделаете обновления до .файл и/или .bashrc и файлы.
недавно я установил О-мой-zsh на OS X и set zsh в качестве оболочки по умолчанию и столкнулся с той же проблемой.
Я!--7-->решить эта проблема путем добавления source ~/.bash_profile в конце .