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