Comment «désactiver» oh-my-zsh (et zsh) sans le désinstaller?

16

J'essayais de nouveaux environnements de développement, y compris zsh et oh-my-zsh. Maintenant que j'ai installé oh-my-zsh, il démarre par défaut sur mes terminaux (iTerm2 et terminal) commence toujours par zsh et avec les paramètres activés depuis oh-my-zsh. Je me demandais s'il était possible de "désactiver" ou d'arrêter d'utiliser zsh et sa configuration avec oh-my-zsh sans avoir à désinstaller oh-my-zsh? Il serait également intéressant de savoir comment les réactiver également.

Actuellement, mes terminaux passent automatiquement en zsh (je pense) et utilisent automatiquement oh-my-zsh. Je veux avoir plus de contrôle sur cela et me permettre de contrôler les deux, quand le zsh est utilisé et quand les fonctionnalités oh-my-zsh sont utilisées.

Une chose qui m'intéresse également est de savoir comment les applications terminales savent quel shell doit démarrer au démarrage. Ce serait bien de pouvoir contrôler aussi!

Si vous expliquez autant que possible le «pourquoi» de chaque commande que vous me donnez, cela serait utile! :)


Je suis sur OS X. Je ne sais pas si cela importe, mais j'ai tendance à aimer davantage les réponses qui sont plus applicables aux environnements Unix plus généraux plutôt qu'aux miens.

Charlie Parker
la source
vous voulez arrêter d'utiliser zsh? ou oh-my-zsh? lequel?
strugee
l'un et l'autre et les deux. c'est-à-dire que je veux pouvoir contrôler les deux, quand j'utilise zsh et oh-my-zsh
Charlie Parker

Réponses:

19

Le libellé de votre question est ambigu, donc je ne peux pas dire si vous voulez dire que vous voulez arrêter d'utiliser zshou si vous voulez arrêter d'utiliser oh-my-zsh. Je couvrirai les deux.

Désactiver zsh

Exécutez simplement chshet sélectionnez le shell que vous utilisiez auparavant. Si vous ne savez pas quel shell vous utilisiez auparavant, c'est presque certainement bash. Cette commande modifie le "shell de connexion" associé à votre utilisateur. Essentiellement, cela change votre shell par défaut.

Vous devrez ouvrir une nouvelle fenêtre de terminal pour que les modifications prennent effet. Si cela ne fonctionne pas, vous devrez vous déconnecter et vous reconnecter pour réinitialiser votre environnement.

Désactiver uniquement oh-my-zsh

  1. Vérifiez s'il ~/.zshrc.pre-oh-my-zshexiste. C'est probablement le cas. (Ce fichier a été créé lorsque le oh-my-zshscript d'installation a déplacé le précédent .zshrc. Il .zshrcs'agit d'un fichier de démarrage de zsh, similaire à .bashrcpourbash .)
  2. Si c'est le cas, faites-le mv ~/.zshrc ~/.zshrc.oh-my-zsh. Cela mettra le oh-my-zsh-créé .zshrcà l'écart, afin que nous puissions restaurer l'original, en faisant mv ~/.zshrc.pre-oh-my-zsh ~/.zshrc.
  3. S'il n'existe pas, ouvrez-le ~/.zshrcdans un éditeur de texte. Trouvez la ligne qui dit source $ZSH/.oh-my-zshet commentez-la ou supprimez-la. Cela désactivera l'initialisation de oh-my-zsh.

Vous devrez redémarrer votre shell pour que les modifications prennent effet.

strugee
la source
Je m'excuse de ma formulation. Je pense que je l'ai clarifié. Est-ce clair maintenant? Merci btw.
Charlie Parker
@CharlieParker ouais, j'étais paresseux. Je vais développer la réponse, peut-être expliquer un peu le "pourquoi".
strugee
1
@CharlieParker au cas où vous ne l'auriez pas remarqué, j'ai mis à jour cette réponse. faites-moi savoir si quelque chose peut être amélioré.
strugee
4

Commutation de configuration ZSH

Si vous voulez tester différents cadres de configuration de zsh (oh-my-zsh, zprezto, etc.) et basculer entre eux, votre meilleur pari utilise des liens symboliques pour ~/.zsh, ~/.zshrc, ~/.zlogin, ~/.zlogout, ~/.zprofileet~/.zshenv . Vous pouvez créer un script shell pour chaque framework afin de créer ces liens symboliques pour une commutation plus rapide.

Mettez vos configurations de framework dans leurs propres dossiers. Pour chaque cadre.

  • Installez le framework dans son propre dossier si possible, sinon
  • Si le cadre force l'installation à ~/.zsh , alors
    • Protéger le courant ~/.zsh . Soit
      • supprimez le ~/.zshlien symbolique;rm ~/.zsh, ou
      • déplacer le ~/.zshdossier;mv ~/.zsh ~/.zsh.backup
    • Exécutez le programme d'installation du framework.
    • Déplacez le dossier du framework vers son propre répertoire. par exemple mv ~/.zsh ~/.oh-my-zsh.
  • Répétez l'opération pour chaque cadre.

Une fois cela fait, créez un script shell pour chaque framework pour créer les liens symboliques nécessaires. Voici un exemple pour zprezto, puisque je l'utilise déjà.

$ mkdir ~/bin
$ cat <<EOF > ~/bin/use-zprezto
#!/bin/bash
SYMLINKS=".zsh .zshrc .zshlogin .zshlogout .zshprofile .zpreztorc .zshenv .zshrc"
CONFIG_HOME="$HOME/.zprezto"

# check for unexpected error conditions
for sym in $SYMLINKS; do
   # report an error and quit if $sym exists and is not a symlink
   [[ -e "$HOME/$sym" -a ! -h "$HOME/$sym" ]] && { echo "error:  '$HOME/$sym' is not a symlink!"; return 1; }
done

# now create the symlinks now that nothing should go wrong
for sym in $SYMLINKS; do
   # remove old symlink if it exists
   [[ -h "$HOME/$sym" ]] && rm -f "$HOME/$sym"
   # create new symlink
   ln -s "$CONFIG_HOME/$sym" "$HOME/$sym"
done

# uncomment next line to start a new zsh shell.  CAUTION: each call is a zsh shell inside a zsh shell.  Too many calls will put you in limbo :D
#/usr/bin/env zsh
EOF

$ chmod 700 ~/bin/use-zprezto

Ce script est assez simple et repose sur le fait que tous mes liens symboliques sont organisés avec le même modèle. Vous pouvez copier et coller la suppression et créer des lignes après la boucle pour les liens symboliques que vous avez qui ne suivent pas le modèle.

Une fois cela fait, utilisez ~/bin/use-zprezto- ou - ~/bin/use-whateverpour basculer entre les frameworks zsh.

Notez que les modifications ne prennent effet que dans les nouveaux shells zsh, pas dans les shells existants.

Commutation de shell

C'est un peu dangereux, mais si vous êtes si enclin, vous pouvez utiliser un lien symbolique pour votre commande shell et définir le lien symbolique comme shell par défaut. Vous pouvez ensuite suivreuse-* méthode de script ci-dessus pour changer votre shell par défaut.

Par exemple avec zsh ...

$ mkdir ~/bin
$ cat <<EOF > ~/bin/use-zsh
#!/bin/bash
# check for valid shell symlink
if [[ ! -h "$HOME/.shell" ]]; then
  echo "error: $HOME/.shell is not a symlink!"
  return 1
fi

# remove existing shell symlink if it exists
[[ -h "$HOME/.shell" ]] && rm -f "$HOME/.shell"

# create new shell symlink, but warn user if this fails!
if ! ln -s /usr/bin/zsh "$HOME/.shell"; then
  echo "ERROR: failed to create $HOME/.shell symlink.  Manually create the symlink or future logins will fail!."
  return 2
fi
EOF

$ chmod 700 ~/bin/use-zsh

La raison pour laquelle cela est dangereux est que vous ne pouvez pas vous connecter sous un utilisateur si le shell stocké dans /etc/passwdn'est pas un programme valide. Vous pouvez donc vous verrouiller hors de votre compte si vous ne faites pas attention; c'est-à-dire que votre ~/.shelllien symbolique est cassé ou ne pointe pas vers un programme interactif. Vous êtes invités à essayer ceci avec un compte utilisateur, mais ce n'est PAS RECOMMANDÉ pour votre rootcompte.

Si vous voulez toujours continuer, alors

$ ~/bin/use-zsh         # ensures ~/.shell exists for chsh
$ echo "$HOME/.shell | sudo tee -a /etc/shells    # add symlink to system's list of valid shells
$ chsh -s ~/.shell      # changes default shell in /etc/passwd for $USER
Justin C
la source
3

chsh -s / bin / bash

Pour définir manuellement un nouveau shell par défaut, faites chsh -s / my / new / shell, par exemple chsh -s / bin / bash. Ensuite, rouvrez simplement vos coquilles.

Honghui Li
la source
2

Vous pouvez demander à zsh de charger ses fichiers de configuration par utilisateur à partir d'un répertoire différent en définissant la variable d'environnement ZDOTDIRavant de démarrer zsh.

Si vous souhaitez démarrer zsh sans charger vos fichiers de configuration, définissez-le ZDOTDIRsur un répertoire inexistant. Si vous souhaitez ignorer les fichiers de configuration système (en dehors de /etc/zshenv), vous pouvez exécuter zsh -f. Si vous souhaitez ignorer les fichiers de configuration système mais exécuter les fichiers par utilisateur, exécutezzsh -d .

Par exemple, si vous souhaitez tester oh-my-zsh sans en faire la valeur par défaut, ne placez pas le .zshrcfichier oh-my-zsh dans votre répertoire personnel. Au lieu de cela, mettez-le ailleurs, par exemple. dans ~/.oh-my-zsh, puis exécutez ZDOTDIR=~/.oh-my-zsh zshlorsque vous souhaitez utiliser oh-my-zsh.


Les applications terminales exécutent le shell indiqué par la SHELLvariable d'environnement. Si cette variable n'est pas définie, ils exécutent le shell de connexion indiqué dans la base de données utilisateur ( /etc/passwd). Vous pouvez demander une application différente lorsque vous démarrez un émulateur de terminal, par exemple xterm -e fish.

Gilles 'SO- arrête d'être méchant'
la source
0

Comme il est un peu caché dans @Gilles, répondez au moyen rapide de charger zsh sans aucune configuration, par exemple .zshrc .zshenv, etc.

zsh -f

Ceci est utile lorsque vous souhaitez tester si quelque chose dans votre configuration empêche certaines fonctionnalités de zsh de fonctionner.

zzapper
la source