Modification du shell par défaut sans les privilèges chsh ou administrator

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:

  • Comment est-ce que je changerais l'extrait ci-dessus pour faire ceci en changeant entre différentes versions de zsh?
  • Pourquoi deux commands 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.