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

8

J'ai vu l'extrait de code suivant dans ce fil: Comment passer de csh à 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

Ma compréhension est que si vous placez cet extrait, ~/.loginil sera invoqué bashlors de votre connexion.

J'ai une situation similaire où j'aimerais utiliser un extrait similaire pour appeler une version zshdifférente de celle par défaut avec laquelle je me connecte. Une partie de la raison pour laquelle je rencontre ce problème est parce que je ne peux pas choisir ma version souhaitée zshdans les options autorisées dans chsh, et je n'ai pas de privilèges d'administrateur.

Avec ça:

  • Comment pourrais-je changer l'extrait ci-dessus pour le faire lors du basculement entre les différentes versions de zsh?
  • Pourquoi deux execcommandes sont-elles nécessaires dans l'extrait ci-dessus? Que font-ils? Aussi, pourquoi l'extrait ci-dessus utilise-t-il sh et bash (l'utilisateur est censé se connecter avec csh)
Amelio Vazquez-Reina
la source

Réponses:

6

Si vous souhaitez exécuter zsh au lieu de bash, remplacez-le simplement /usr/local/bin/bashpar le chemin d'accès à l' zshexécutable. Notez que cet extrait est spécifique à csh; si votre shell de connexion n'est pas (t) csh, ce code ~/.loginne fera rien pour vous.

Quant à savoir pourquoi l'extrait a été écrit de cette façon, vous devez demander à la personne qui l'a écrit. [Vérifie qui c'était.] Oh. Eh bien, si vous le faites, exec /usr/local/bin/bashvous ne démarrerez pas un shell de connexion, donc votre .profilene sera pas exécuté. Mais cela pourrait être résolu d'une manière plus simple en exécutant /usr/local/bin/bash --login.

Maintenant, si votre shell de connexion n'est pas csh, vous voudrez un extrait de code différent exec. Dans les coques de style Bourne, y compris zsh:

if [ -x ~/bin/zsh ]; then exec ~/bin/zsh; fi

Faites cela exec ~/bin/zsh -lsi 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 .profileou .bash_profile; si votre shell de connexion est zsh, ne mettez pas l'extrait dans votre .zprofile, sinon assurez-vous que la nouvelle instance de zsh ne l'appellera execplus.

Gilles 'SO- arrête d'être méchant'
la source
Merci @Gilles. J'ai écrit ce qui suit sur mon .zprofile: if [[ $ZSH_VERSION != 4.3.14 ]]; then exec /n/sw/zsh-4.3.14/bin/zsh --login fiet cela semble fonctionner!
Amelio Vazquez-Reina