J'ai vu le snippet suivant dans ce fil: Comment changer de csh en bash comme shell par défaut
sleep 2 if (-x /usr/local/bin/bash) then exec /bin/sh -c '. ~/.profile; exec /usr/local/bin/bash' endif
Je crois comprendre que si vous placez cet extrait dans ~/.login
il invoquera bash
lorsque vous vous connecterez.
J'ai une situation similaire où je voudrais utiliser un extrait similaire pour invoquer une version de zsh
qui est différente de celle par défaut avec laquelle je me connecte. Une partie de la raison pour laquelle je traverse cette difficulté est parce que je ne peux pas choisissez ma version désirée de zsh
dans les options autorisées dans chsh
, et je n'ai pas de privilèges d'administrateur.
Avec ça:
exec
sont-elles nécessaires dans l'extrait ci-dessus? Que font-ils? Aussi, pourquoi l'extrait ci-dessus utilise sh
et bash
(l'user est censé se connecter avec csh
) Si vous voulez exécuter zsh au lieu de bash, remplacez /usr/local/bin/bash
par le path de l'exécutable zsh
. Notez que cet extrait est spécifique à csh; si votre shell de connection n'est pas (t) csh, ce code dans ~/.login
ne fera rien pour vous.
Quant à savoir pourquoi l'extrait a été écrit de cette façon, vous devez requestr à la personne qui l'a écrit. [Vérifie qui c'était.] Oh. Eh bien, si vous exec /usr/local/bin/bash
simplement exec /usr/local/bin/bash
vous ne démarrerez pas de shell de connection, donc votre .profile
ne sera pas exécuté. Mais cela pourrait être résolu de manière plus simple en exécutant /usr/local/bin/bash --login
.
Maintenant, si votre shell de connection n'est pas csh, vous aurez besoin d'un extrait différent autour de exec
. Dans les coquilles de type Bourne, y compris zsh:
if [ -x ~/bin/zsh ]; then exec ~/bin/zsh; fi
Faites de cet exec ~/bin/zsh -l
si vous voulez que la nouvelle instance de zsh lise votre ~/.zprofile
. Notez que si vous faites cela, l'extrait ci-dessus doit être dans votre .profile
ou .bash_profile
; si votre shell de connection est zsh, ne mettez pas le .zprofile
dans votre .zprofile
, ou bien assurez-vous que la nouvelle instance de zsh ne l'appellera plus.