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
, ~/.zprofile
et~/.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
~/.zsh
lien symbolique;rm ~/.zsh
, ou
- déplacer le
~/.zsh
dossier;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-whatever
pour 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/passwd
n'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 ~/.shell
lien 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 root
compte.
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
zsh
? ouoh-my-zsh
? lequel?