Comutação de configuração ZSH
Se você quiser testar diferentes quadros de configuração zsh (oh-meu-zsh, zprezto, etc) e alternar entre eles, sua melhor aposta é usar links simbólicos para ~/.zsh
, ~/.zshrc
, ~/.zlogin
, ~/.zlogout
, ~/.zprofile
, e ~/.zshenv
. Você pode criar um shell scripts para cada estrutura para criar esses links simbólicos para uma troca mais rápida.
Coloque suas configurações de estrutura em suas próprias pastas. Para cada estrutura.
- Instale a estrutura em sua própria pasta, se possível, caso contrário
- Se a estrutura forçar a instalação
~/.zsh
, então
- Proteja a corrente
~/.zsh
primeiro. Ou
- remova o
~/.zsh
link simbólico; rm ~/.zsh
ou
- mova a
~/.zsh
pasta;mv ~/.zsh ~/.zsh.backup
- Execute o instalador da estrutura.
- Mova a pasta da estrutura para seu próprio diretório. por exemplo
mv ~/.zsh ~/.oh-my-zsh
.
- Repita para cada estrutura.
Uma vez feito, crie um script de shell para cada estrutura para criar os links simbólicos necessários. Aqui está um exemplo para o zprezto, já que eu já o 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
Esse script é bastante simples e depende do fato de que todos os meus links simbólicos são organizados com o mesmo padrão. Você pode copiar e colar o remover e criar linhas após o loop para links simbólicos que você possui e que não seguem o padrão.
Uma vez feito, use - ~/bin/use-zprezto
ou ~/bin/use-whatever
- para alternar entre as estruturas zsh.
Observe que as alterações só entram em vigor em novos shells zsh, não nos shells existentes.
Comutação de Shell
É um pouco perigoso, mas se você quiser, pode usar um link simbólico para o comando shell e definir o link simbólico como shell padrão. Você pode seguir o use-*
método de script acima para alterar seu shell padrão.
Como um exemplo com 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
A razão pela qual isso é perigoso é que você não pode fazer login com um usuário se o shell armazenado /etc/passwd
não for um programa válido. Portanto, você pode sair da sua conta se não tomar cuidado; ou seja, seu ~/.shell
link simbólico está quebrado ou não aponta para um programa interativo. Você pode tentar isso com uma conta de usuário, mas NÃO É RECOMENDADO para sua root
conta.
Se você ainda deseja continuar, então
$ ~/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
? qual?