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
~/.zsh
primero. Ya sea
- eliminar el
~/.zsh
enlace simbólico; rm ~/.zsh
o
- mueve la
~/.zsh
carpeta;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-whatever
cambiar 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/passwd
no es un programa válido. Por lo tanto, puede bloquear su cuenta si no tiene cuidado; es decir, su ~/.shell
enlace simbólico está roto o no apunta a un programa interactivo. Puede probarlo con una cuenta de usuario, pero NO SE RECOMIENDA para su root
cuenta.
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
zsh
? ooh-my-zsh
? ¿cuales?