Como você “desativa” o oh-my-zsh (e zsh) sem desinstalá-lo?

13

Eu estava tentando novos ambientes de desenvolvimento, incluindo zsh e oh-my-zsh. Agora que instalei o oh-my-zsh, ele inicia por padrão em meus terminais (iTerm2 e terminal) sempre inicio com zsh e com as configurações do oh-my-zsh. Eu queria saber se era possível "desativar" ou parar de usar o zsh e sua configuração com oh-my-zsh sem ter que desinstalar o oh-my-zsh? Também seria bom saber como ativá-los novamente.

Atualmente, meus terminais entram em zsh automaticamente (eu acho) e usam o oh-my-zsh automaticamente. Eu quero ter mais controle sobre isso e eu poder controlar ambos, quando o zsh estiver sendo usado e quando os recursos do oh-my-zsh estiverem sendo usados.

Uma coisa que também estou interessada em saber é, como os aplicativos de terminal sabem qual shell iniciar a execução na inicialização. Isso seria bom poder controlar também!

Se você explicar o máximo possível do "porquê" de cada comando que me der, isso seria útil! :)

Estou no OS X. Não tenho certeza se isso é importante, mas tenho a tendência de gostar de respostas mais aplicáveis a ambientes Unix mais gerais do que os meus.

    
por Charlie Parker 15.06.2014 / 05:03

4 respostas

13

O texto da sua pergunta é ambíguo, então não sei dizer se você quer parar de usar zsh ou se deseja parar de usar oh-my-zsh . Eu cobrirei os dois.

Desativando zsh

Basta executar chsh e selecionar o shell que você estava usando antes. Se você não sabe qual shell você estava usando antes, é quase certamente bash . Este comando altera o "login shell" associado ao seu usuário. Essencialmente, ele altera seu shell padrão.

Você precisará abrir uma nova janela de terminal para que as alterações entrem em vigor. Se isso não funcionar, você precisará efetuar logout e fazer login novamente para reinicializar seu ambiente.

Desativando apenas oh-my-zsh

  1. Verifique se ~/.zshrc.pre-oh-my-zsh existe. Provavelmente faz. (Esse arquivo terá sido criado quando o script de instalação oh-my-zsh tiver movido seu .zshrc anterior para fora do caminho. .zshrc é um arquivo de inicialização de zsh , semelhante a .bashrc para bash .)
  2. Em caso afirmativo, faça mv ~/.zshrc ~/.zshrc.oh-my-zsh . Isso colocará o oh-my-zsh -created .zshrc fora do caminho, para que possamos restaurar o original, fazendo mv ~/.zshrc.pre-oh-my-zsh ~/.zshrc .
  3. Se não existir, abra ~/.zshrc em um editor de texto. Encontre a linha que diz source $ZSH/.oh-my-zsh e comente ou remova. Isso desativará a inicialização de oh-my-zsh .

Você precisará reiniciar o seu shell para que as alterações entrem em vigor.

    
por 15.06.2014 / 05:26
4

Comutação de configurações ZSH

Se você quiser testar diferentes estruturas de configuração zsh (oh-my-zsh, zprezto, etc) e alternar entre elas, sua melhor opção é usar links simbólicos para ~/.zsh , ~/.zshrc , ~/.zlogin , ~/.zlogout , ~/.zprofile e ~/.zshenv . Você pode querer criar um shell scripts para cada framework para criar esses links simbólicos para 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 o framework força a instalação para ~/.zsh , então
    • Protege o atual ~/.zsh primeiro. Ou
      • remova o link simbólico ~/.zsh ; rm ~/.zsh ou
      • mova a pasta ~/.zsh ; %código%
    • Execute o instalador da estrutura.
    • Mova a pasta da estrutura para seu próprio diretório. por exemplo. mv ~/.zsh ~/.zsh.backup .
  • Repita para cada estrutura.

Uma vez feito, crie um script de shell para cada framework 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 estão organizados com o mesmo padrão. Você pode copiar e colar as linhas remove e create depois do loop de links simbólicos que você não segue o padrão.

Uma vez feito, use mv ~/.zsh ~/.oh-my-zsh - ou ~/bin/use-zprezto - para alternar entre as estruturas zsh.

Observe que as alterações só têm efeito em novas shells, não em shells existentes.

Troca de shell

É um pouco perigoso, mas se você estiver inclinado, você pode usar um link simbólico para o seu comando shell e definir o symlink como seu shell padrão. Você pode seguir o método de script ~/bin/use-whatever 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

O motivo pelo qual isso é perigoso é que você não pode fazer login sob um usuário se o shell armazenado em use-* não for um programa válido. Assim, você pode se proteger da sua conta se não for cuidadoso; ou seja, seu link simbólico /etc/passwd está quebrado ou não aponta para um programa interativo. Você pode tentar isso com uma conta de usuário, mas isso NÃO É RECOMENDADO para sua conta ~/.shell .

Se você ainda quiser continuar,

$ ~/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
    
por 15.06.2014 / 07:11
3

chsh -s / bin / bash

Para definir manualmente um novo shell padrão, faça chsh -s / my / novo / shell, por exemplo, chsh -s / bin / bash. Então simplesmente reabra suas conchas.

    
por 04.09.2017 / 11:11
1

Você pode dizer ao zsh para carregar seus arquivos de configuração por usuário de um diretório diferente, definindo a variável de ambiente ZDOTDIR antes de iniciar o zsh.

Se você deseja iniciar o zsh sem carregar seus arquivos de configuração, defina ZDOTDIR como um diretório inexistente. Se você quiser pular arquivos de configuração do sistema (exceto /etc/zshenv ), você pode executar zsh -f . Se você quiser ignorar os arquivos de configuração do sistema, mas executar os arquivos por usuário, execute zsh -d .

Por exemplo, se você quiser testar o oh-my-zsh sem torná-lo o padrão, não coloque o .zshrc do oh-my-zsh no seu diretório home. Em vez disso, coloque em outro lugar, por exemplo. em ~/.oh-my-zsh e, em seguida, execute ZDOTDIR=~/.oh-my-zsh zsh quando você quiser usar oh-my-zsh.

Os aplicativos de terminal executam o shell indicado pela variável de ambiente SHELL . Se esta variável não estiver definida, eles executam o shell de login indicado no banco de dados do usuário ( /etc/passwd ). Você pode solicitar um aplicativo diferente ao iniciar um emulador de terminal, por exemplo, xterm -e fish .

    
por 16.06.2014 / 03:49

Tags