¿Cómo se "deshabilita" oh-my-zsh (y zsh) sin desinstalarlo?

16

Estaba probando nuevos entornos de desarrollo, incluidos zsh y oh-my-zsh. Ahora que he instalado oh-my-zsh, comienza de manera predeterminada en mis terminales (iTerm2 y terminal) siempre comienza con zsh y con la configuración activada desde oh-my-zsh. Me preguntaba si era posible "deshabilitar" o dejar de usar zsh y su configuración con oh-my-zsh sin tener que desinstalar oh-my-zsh? También sería bueno saber cómo volver a activarlos.

Actualmente, mis terminales entran en zsh automáticamente (creo) y usan oh-my-zsh automáticamente. Quiero tener más control sobre eso y poder controlar ambos, cuando se usa zsh y cuando se usan las características oh-my-zsh.

Una cosa que también me interesa saber es cómo las aplicaciones de terminal saben qué shell comenzar a ejecutar al inicio. ¡Eso sería bueno poder controlar también!

Si explicas tanto como puedas del "por qué" de cada comando que me das, ¡eso sería útil! :)


Estoy en OS X. No estoy seguro si eso importa, pero tiendo a que me gusten más las respuestas que son más aplicables a entornos Unix más generales que a los míos.

Charlie Parker
fuente
quieres dejar de usar zsh? o oh-my-zsh? ¿cuales?
strugee
cualquiera y ambos. es decir, quiero poder controlar ambos, cuando estoy usando zsh y oh-my-zsh
Charlie Parker

Respuestas:

19

La redacción de su pregunta es ambigua, por lo que no puedo decir si quiere dejar de usarla zsho si quiere dejar de usarla oh-my-zsh. Cubriré ambos.

Deshabilitar zsh

Simplemente ejecute chshy seleccione el shell que estaba usando antes. Si no sabes qué shell estabas usando antes, es casi seguro bash. Este comando cambia el "shell de inicio de sesión" que está asociado con su usuario. Básicamente, cambia su shell predeterminado.

Deberá abrir una nueva ventana de terminal para que los cambios surtan efecto. Si esto no funciona, deberá cerrar sesión y volver a iniciarla para reiniciar su entorno.

Deshabilitar solo oh-my-zsh

  1. Verificar si ~/.zshrc.pre-oh-my-zshexiste. Probablemente lo hace. (Este archivo se habrá creado cuando la oh-my-zshsecuencia de comandos de instalación eliminó su anterior .zshrc. .zshrcEs un archivo de inicio zshsimilar a .bashrcfor bash).
  2. Si es así, hazlo mv ~/.zshrc ~/.zshrc.oh-my-zsh. Esto eliminará el oh-my-zsh-creado .zshrc, para que podamos restaurar el original, haciendo mv ~/.zshrc.pre-oh-my-zsh ~/.zshrc.
  3. Si no existe, ábralo ~/.zshrcen un editor de texto. Encuentre la línea que dice source $ZSH/.oh-my-zshy coméntela o elimínela. Esto deshabilitará la inicialización de oh-my-zsh.

Deberá reiniciar su shell para que los cambios surtan efecto.

Strugee
fuente
Pido disculpas por mi redacción. Creo que lo aclaré. ¿Está claro ahora? Gracias por cierto.
Charlie Parker
@CharlieParker, sí, estaba siendo flojo. Expandiré la respuesta, tal vez explique un poco del "por qué".
strugee
1
@CharlieParker en caso de que no lo hayas notado, actualicé esta respuesta. avíseme si algo se puede mejorar.
strugee
4

ZSH Config Switching

Si desea probar diferentes marcos de configuración zsh (oh-my-zsh, zprezto, etc) y cambiar entre ellos, la mejor opción es el uso de enlaces simbólicos para ~/.zsh, ~/.zshrc, ~/.zlogin, ~/.zlogout, ~/.zprofile, y ~/.zshenv. Es posible que desee crear scripts de shell para cada marco para crear esos enlaces simbólicos para un cambio más rápido.

Ponga sus configuraciones de framework en sus propias carpetas. Para cada marco.

  • Instale el marco en su propia carpeta si es posible, de lo contrario
  • Si el marco obliga a la instalación a ~/.zsh, entonces
    • Proteja la corriente ~/.zshprimero. Ya sea
      • eliminar el ~/.zshenlace simbólico; rm ~/.zsho
      • mueve la ~/.zshcarpeta;mv ~/.zsh ~/.zsh.backup
    • Ejecute el instalador de framework.
    • Mueva la carpeta del marco a su propio directorio. por ej mv ~/.zsh ~/.oh-my-zsh.
  • Repita para cada marco.

Una vez hecho esto, cree un script de shell para cada marco para crear los enlaces simbólicos necesarios. Aquí hay un ejemplo para zprezto, ya que ya lo uso.

$ 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

Este script es bastante simple y se basa en el hecho de que todos mis enlaces simbólicos están organizados con el mismo patrón. Puede copiar y pegar la eliminación y crear líneas después del ciclo para los enlaces simbólicos que tiene que no siguen el patrón.

Una vez hecho esto, use ~/bin/use-zprezto--o - para ~/bin/use-whatevercambiar entre los marcos de zsh.

Tenga en cuenta que los cambios solo surten efecto en los nuevos shells zsh, no en los shells existentes.

Conmutación de Shell

Es un poco peligroso, pero si está tan inclinado, puede usar un enlace simbólico para su comando de shell y establecer el enlace simbólico como su shell predeterminado. Luego puede seguir el use-*método de script anterior para cambiar su shell predeterminado.

Como ejemplo con 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 razón por la que esto es peligroso es que no puede iniciar sesión con un usuario si el shell almacenado /etc/passwdno es un programa válido. Por lo tanto, puede bloquear su cuenta si no tiene cuidado; es decir, su ~/.shellenlace simbólico está roto o no apunta a un programa interactivo. Puede probarlo con una cuenta de usuario, pero NO SE RECOMIENDA para su rootcuenta.

Si aún quieres continuar, entonces

$ ~/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
fuente
3

chsh -s / bin / bash

Para configurar manualmente un nuevo shell predeterminado, haga chsh -s / my / new / shell, por ejemplo, chsh -s / bin / bash. Luego, simplemente vuelva a abrir sus conchas.

Honghui Li
fuente
2

Se puede decir zsh para cargar sus archivos de configuración de cada usuario de un directorio diferente al establecer la variable de entorno ZDOTDIRantes de comenzar zsh.

Si desea iniciar zsh sin cargar sus archivos de configuración, configúrelo ZDOTDIRen un directorio inexistente. Si desea omitir los archivos de configuración del sistema (aparte de /etc/zshenv), puede ejecutar zsh -f. Si desea omitir los archivos de configuración del sistema pero ejecuta los archivos por usuario, ejecute zsh -d.

Por ejemplo, si desea probar-conducir oh-my-zsh sin convertirlo en el predeterminado, no coloque .zshrcdesde oh-my-zsh en su directorio de inicio. En su lugar, póngalo en otro lugar, por ejemplo. adentro ~/.oh-my-zsh, y luego corre ZDOTDIR=~/.oh-my-zsh zshcuando quieras usar oh-my-zsh.


Las aplicaciones de terminal ejecutan el shell indicado por la SHELLvariable de entorno. Si esta variable no está establecida, ejecutan el shell de inicio de sesión indicado en la base de datos del usuario ( /etc/passwd). Puede solicitar una aplicación diferente cuando inicia un emulador de terminal, por ejemplo xterm -e fish.

Gilles 'SO- deja de ser malvado'
fuente
0

Como está un poco oculto en @Gilles, responda la forma rápida de cargar zsh sin ninguna configuración, por ejemplo .zshrc .zshenv, etc.

zsh -f

Esto es útil cuando quiere probar si algo en su configuración impide que alguna característica de zsh funcione.

zzapper
fuente