Cambio di configurazione ZSH
Se si desidera testare diversi quadri di configurazione zsh (oh-my-zsh, zprezto, ecc) e passare tra di loro, la cosa migliore è usare i link simbolici per ~/.zsh
, ~/.zshrc
, ~/.zlogin
, ~/.zlogout
, ~/.zprofile
, e ~/.zshenv
. È possibile che si desideri creare uno script di shell per ciascun framework per creare quei collegamenti simbolici per un passaggio più rapido.
Inserisci le tue configurazioni di framework nelle loro cartelle. Per ogni quadro.
- Se possibile, installare il framework nella propria cartella, altrimenti
- Se il framework forza l'installazione
~/.zsh
, allora
- Proteggi
~/.zsh
prima la corrente . O
- rimuovere il
~/.zsh
collegamento simbolico; rm ~/.zsh
, o
- sposta la
~/.zsh
cartella;mv ~/.zsh ~/.zsh.backup
- Esegui il programma di installazione del framework.
- Spostare la cartella del framework nella propria directory. es
mv ~/.zsh ~/.oh-my-zsh
.
- Ripetere l'operazione per ciascun framework.
Al termine, creare uno script di shell per ciascun framework per creare i collegamenti simbolici necessari. Ecco un esempio di zprezto, poiché lo uso già.
$ 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
Questo script è abbastanza semplice e si basa sul fatto che tutti i miei collegamenti simbolici sono organizzati con lo stesso schema. Puoi copiare e incollare la rimozione e creare linee dopo il ciclo per i collegamenti simbolici che non seguono il modello.
Una volta fatto, usare ~/bin/use-zprezto
--o - ~/bin/use-whatever
per alternare tra i framework zsh.
Si noti che le modifiche hanno effetto solo nelle nuove shell zsh, non nelle shell esistenti.
Cambio di shell
È un po 'pericoloso, ma se sei così incline, puoi usare un collegamento simbolico per il comando della shell e impostare il collegamento simbolico come shell predefinita. È quindi possibile seguire il use-*
metodo di script sopra per modificare la shell predefinita.
Ad esempio 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
Il motivo per cui questo è pericoloso è che non è possibile accedere con un utente se la shell memorizzata /etc/passwd
non è un programma valido. Quindi puoi bloccarti fuori dal tuo account se non stai attento; cioè il tuo ~/.shell
link simbolico è rotto o non punta a un programma interattivo. Puoi provare questo con un account utente, ma NON È CONSIGLIATO per il tuo root
account.
Se vuoi ancora continuare, allora
$ ~/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
? quale?