web-dev-qa-db-fra.com

Comment charger ~ / .bash_profile lors de la saisie de 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 (de connexion) par défaut sur 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, lorsque j'essaie d'entrer dans shell bash à partir de zsh, il semble ne pas charger ~/.bash_profile, car je ne peux pas exécuter ma commande à l'aide d'alias, qui sont définis dans mon ~/.bash_profile comme alias Julia="~/juila/Julia", etc. En outre, l'invite n'est pas celle que j'ai définie dans le fichier et renvoie à la place bash-3.2$.

Pour certaines raisons, lorsque je configure mon shell de connexion sur bash et que je saisis zsh dans bash, puis ~/.zshrc est chargé correctement.

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

30
Blaszard

Un bash interactif lit votre ~/.bash_profile s'il s'agit d'un shell de connexion ou de votre ~/.bashrc s'il ne s'agit pas d'un shell de connexion.

Un .bash_profile contiendra quelque chose comme:

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

donc .bashrc peut contenir des commandes à exécuter par des shells de connexion ou non.

Si vous exécutez bash -l plutôt que simplement bash, il devrait lire votre .bash_profile.

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

23
Keith Thompson

Ouvert ~/.zshrc, et tout en bas du fichier, ajoutez ce qui suit:

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

Chaque fois que vous ouvrez le terminal, il charge ce qui est défini dans ~/.bash_profile (si le fichier existe). Avec cela, vous pouvez conserver vos paramètres personnalisés pour zsh (couleurs, etc.). Et vous pouvez conserver vos paramètres Shell personnalisés dans .bash_profile fichier.

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

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

21
Yuchen Zhong

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

macOS :

Comme @ chepner le résume succinctement (c'est moi qui souligne):

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

Par conséquent, certains utilisateurs OSX ne créent que ~/.bash_profile, et ne vous embêtez jamais avec ~/.bashrc, car TOUS les shells bash interactifs sont login shells.

Linux :

Sous Linux, la situation est généralement inversée: bash les shells créés interactivement sont [interactifs] NON-login shells, donc c'est ~/.bashrc c'est important.

En conséquence, de nombreux utilisateurs Linux ne traitent que ~/.bashrc.


Pour conserver les profils bash qui fonctionnent sur les DEUX plateformes , utilisez la technique mentionnée par @Keith Thompson:

  • Mettez vos définitions (alias, fonctions, ...) dans ~/.bashrc
  • Ajoutez la ligne suivante à ~/.bash_profile
[[ -f ~/.bashrc ]] && . ~/.bashrc
18
mklement0

Copiez le contenu de ~/.bash_profile et collez-le au bas du fichier ~/.zshrc.

12
Sandeep Kumar

Pour les utilisateurs de ZSH sur MacOs, je me suis retrouvé avec un one liner.

Tout en bas du ( ~/.zshrc j'ai ajouté la ligne suivante:

bash -l

Ce qu'il fait est simplement de charger les paramètres . Bash_profile (alias, fonction, export $ PATH, ...)

Si vous décidez de vous débarrasser de ZSH et de revenir à BASH, vous serez de retour à la normale sans aucun problème.

5
Yahel

Si c'est quelque chose que vous faites rarement, ou s'il n'est tout simplement pas approprié d'apporter des modifications, vous pouvez également "source" le . Bash_profile après avoir lancé le shell bash enfant.

. ~/.bash_profile

Cela récupérera les paramètres que vous définissez dans le script . Bash_profile pour la durée de vie de cette session Shell. Dans la plupart des cas, vous devriez pouvoir répéter cette commande, c'est donc aussi un moyen facile de tester toutes les modifications que vous apportez sans avoir à effectuer une connexion complète, ainsi que de mettre à jour toutes vos sessions Shell existantes si vous effectuez des mises à niveau vers les fichiers . bash_profile &/ou . bashrc.

3
theNbomr

Récemment, j'ai installé oh-my-zsh sur OS X et défini zsh comme shell par défaut et j'ai rencontré le même problème.
I résol ce problème en ajoutant source ~/.bash_profile au bout du .zshrc fichier.

1
haccks

Pour ceux qui viennent d'installer zsh et qui souhaitent que leur alias de bash fonctionne sur zsh, procédez comme suit

  1. Ouvrez le fichier .zshrc dans vim comme ça

     vi ~/.zshrc
    
  2. Faites défiler vers le bas

  3. cliquez sur "i" pour activer le mode d'écriture
  4. Dites à zsh de charger les éléments à partir de bash_profile lorsque cela est nécessaire
    source ~/.bash_profile
    
  5. Écrivez et quittez ainsi
    :wq
    
  6. Rafraîchissez votre zsh comme ça
    source ~/.zshrc
    
    C'est ça. Maintenant, tous vos alias enregistrés dans .bash_profile seront prêts à être utilisés dans zsh.
0
Mussa Charles