Как загрузить ~/.профиль 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

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


открыть ~/.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 в конце .