Comment charger ~/.profil bash en entrant bash depuis zsh?

j'ai utilisé bash pendant deux ans, et j'ai juste essayé de passer à zsh shell sur mon OS X via homebrew. Et j'ai défini mon shell par défaut (login) à zsh, et j'ai confirmé qu'il est correctement défini en voyant que lorsque je lance mon Terminal, c'est le shell zsh qui est utilisé par défaut.

cependant, quand j'essaie d'entrer Bash shell à partir de zsh, cela ressemble à ne pas charger ~/.bash_profile , car je ne peux pas exécuter ma commande en utilisant des alias, qui est défini dans mon ~/.bash_profile comme alias julia="~/juila/julia" , etc.. De plus, le prompt n'est pas ce que j'ai défini dans le fichier et retourne plutôt bash-3.2$ .

pour certaines raisons, quand je mets mon shell de connexion à bash, et que j'entre zsh depuis bash, alors ~/.zshrc est chargé correctement.

alors pourquoi n'est-il pas chargé chaque fois que j'exécute bash depuis zsh? Mon ~/.bash_profile est symboliquement lié à ~/Dropbox/.bash_profile afin de le synchroniser avec mes autres ordinateurs. Peut-être est-il poser problème?

24
demandé sur mklement0 2014-04-23 06:11:47

7 réponses

interactif bash lit ~/.bash_profile si c'est un shell de connexion, ou votre ~/.bashrc si ce n'est pas un shell de connexion.

un .bash_profile typique contiendra quelque chose comme:

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

ainsi .bashrc peut contenir des commandes à exécuter par des interpréteurs de commandes login ou non.

si vous lancez bash -l plutôt que bash , il faut lire votre .bash_profile .

référence: https://www.gnu.org/software/bash/manual/html_node/Bash-Startup-Files.html

18
répondu Keith Thompson 2014-04-23 02:17:27

pour compléter l'excellente réponse de @Keith Thompson:

macOS :

comme @chepner le dit succinctement (je souligne):

dans OS X, bash n'est pas utilisé dans le processus initial de connexion [au démarrage], ni dans le Terminal.app (ou d'autres émulateurs de terminaux) processus existe en dehors de toute session de bash préexistante, donc chaque nouvelle fenêtre [ou onglet - lire: shell bash interactif] (par défaut) se traite comme une nouvelle session de connexion .

en conséquence, certains utilisateurs D'OSX ne créent que ~/.bash_profile , et ne se soucient jamais de ~/.bashrc , parce que tous les shells bash interactifs sont login shells.

Linux :

sur Linux, la situation est typiquement inversé : Les shells bash créés de façon interactive sont des shells [interactifs] NON-login , donc c'est ~/.bashrc qui compte.

comme résultat, beaucoup D'utilisateurs de Linux ne traitent que ~/.bashrc .


maintenir bash des profils sur les DEUX plates-formes , utilisez la technique de @Keith Thompson cite:

  • mettez vos définitions (alias, fonctions, ...) dans ~/.bashrc
  • ajouter la ligne suivante à ~/.bash_profile
[[ -f ~/.bashrc ]] && . ~/.bashrc
17
répondu mklement0 2017-11-14 21:00:56

Copier le contenu de ~/.bash_profile et les coller au bas de ~/.zshrc fichier.

11
répondu Sandeep Kumar 2015-11-04 02:51:24

ouvrir ~/.zshrc , et au bas du fichier, ajouter ce qui suit:

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

chaque fois que vous ouvrez le terminal, il chargera tout ce qui est défini dans ~/.bash_profile (si le fichier existe). Avec cela, vous pouvez garder vos paramètres personnalisés pour zsh (couleurs, et etc). Et vous pouvez garder vos paramètres de shell personnalisés dans le fichier .bash_profile .

C'est beaucoup plus propre que d'utiliser bash -l IMO.

Si vous préférez mettre vos paramètres dans .bashrc , ou .bash_login , ou .profile , vous pouvez faire de même pour eux.

6
répondu Yuchen Zhong 2018-01-20 19:27:06

pour les utilisateurs de ZSH sur MacOs, j'ai fini avec une doublure.

Au bas de la ~/.zshrc j'ai ajouté la ligne suivante:

bash -l

ce qu'il fait est simplement de charger le .bash_profile paramètres(alias, fonction, Exporter $PATH, ...)

si vous décidez de vous débarrasser de ZSH et de retourner à plain BASH, vous serez retour à la normale sans tracas du tout.

5
répondu Yahel 2016-11-14 09:21:19

si c'est quelque chose que vous faites rarement, ou s'il n'est tout simplement pas approprié de faire des changements, vous pouvez également 'source' le .bash_profile après avoir lancé le shell bash enfant.

. ~/.bash_profile

Cela va tirer dans les paramètres que vous faites dans le .bash_profile script pour la vie de cette session shell. Dans la plupart des cas, vous devriez être en mesure de répéter cette commande, il est donc aussi un moyen facile de tester tous les changements que vous make sans avoir besoin de faire une connexion complète, ainsi que mettre à jour toutes vos sessions shell existantes si vous faites des mises à jour sur le .bash_profile et/ou .bashrc "151930920 de fichiers".

3
répondu theNbomr 2014-04-23 17:57:43

J'ai récemment installé oh-my-zsh sur OS X et j'ai défini zsh comme shell par défaut et j'ai fait face au même problème.

I a résolu ce problème en ajoutant source ~/.bash_profile à la fin du fichier .zshrc .

0
répondu haccks 2018-09-13 21:08:13