Как загрузить файл ~/.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
, чтобы синхронизировать его с другими моими компьютерами. Возможно, это вызывает проблему?
Ответы
Ответ 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, сделайте следующее
Откройте файл .zshrc в vim следующим образом
vi ~/.zshrc
Прокрутите вниз
- нажмите "i", чтобы включить режим записи
- Скажите zsh для загрузки элементов из bash_profile, когда это необходимо, так
source ~/.bash_profile
- Пиши и выходи так
:wq
- Обновите свой Zsh, как так
source ~/.zshrc
Это. Теперь все ваши сохраненные псевдонимы в .bash_profile будут готовы к использованию в zsh.