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?
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
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
Copier le contenu de ~/.bash_profile et les coller au bas de ~/.zshrc fichier.
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.
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.
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".