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

16

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 nos meus terminais (iTerm2 e terminal) sempre começa 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 o oh-my-zsh sem ter que desinstalar o oh-my-zsh? Também seria bom saber como ativá-los novamente.

Atualmente, meus terminais entram no zsh automaticamente (acho) e usam o oh-my-zsh automaticamente. Quero ter mais controle sobre isso e poder controlar os dois, quando o zsh está sendo usado e quando os recursos oh-my-zsh estão sendo usados.

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

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


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

Charlie Parker
fonte
você quer parar de usar zsh? ou oh-my-zsh? qual?
strugee
um e ambos. ou seja, eu quero ser capaz de controlar tanto, quando eu estou usando zsh e oh-meu-zsh
Charlie Parker

Respostas:

19

O texto da sua pergunta é ambíguo, por isso não posso dizer se você quer dizer que deseja parar de usar zshou deseja parar de usar oh-my-zsh. Eu vou cobrir os dois.

Desativando zsh

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

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

Desativando apenas oh-my-zsh

  1. Verifique se ~/.zshrc.pre-oh-my-zshexiste. Provavelmente sim. (Este arquivo será criado quando o oh-my-zshscript de instalação afastou o anterior .zshrc. .zshrcÉ um arquivo de inicialização zshsemelhante a .bashrcfor bash.)
  2. Se isso acontecer, faça mv ~/.zshrc ~/.zshrc.oh-my-zsh. Isso colocará o oh-my-zsh-criado .zshrcfora do caminho, para que possamos restaurar o original, fazendo mv ~/.zshrc.pre-oh-my-zsh ~/.zshrc.
  3. Se não existir, abra ~/.zshrcem um editor de texto. Encontre a linha que diz source $ZSH/.oh-my-zshe comente ou remova-a. Isso desativará a inicialização de oh-my-zsh.

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

strugee
fonte
Peço desculpas pela minha redação. Eu acredito que esclareci. Está claro agora? Obrigado btw.
Charlie Parker
@CharlieParker sim, eu estava sendo preguiçoso. Expandirei a resposta, talvez explique um pouco do "porquê".
strugee
11
@CharlieParker, caso você não tenha notado, atualizei esta resposta. deixe-me saber se algo pode ser melhorado.
strugee
4

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 ~/.zshprimeiro. Ou
      • remova o ~/.zshlink simbólico; rm ~/.zshou
      • mova a ~/.zshpasta;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-zpreztoou ~/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/passwdnão for um programa válido. Portanto, você pode sair da sua conta se não tomar cuidado; ou seja, seu ~/.shelllink 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 rootconta.

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
Justin C
fonte
3

chsh -s / bin / bash

Para definir manualmente um novo shell padrão, execute chsh -s / my / new / shell, por exemplo, chsh -s / bin / bash. Em seguida, basta reabrir suas conchas.

Honghui Li
fonte
2

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 ZDOTDIRantes de iniciar o zsh.

Se você deseja iniciar o zsh sem carregar seus arquivos de configuração, configure ZDOTDIRpara um diretório inexistente. Se você quiser pular os arquivos de configuração do sistema (além de /etc/zshenv), poderá executar zsh -f. Se você quiser pular 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 .zshrcoh-my-zsh no diretório inicial. Em vez disso, coloque-o em outro lugar, por exemplo. na ~/.oh-my-zsh, e depois executar ZDOTDIR=~/.oh-my-zsh zshquando quiser usar oh-meu-zsh.


Os aplicativos de terminal executam o shell indicado pela SHELLvariável de ambiente. Se essa 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.

Gilles 'SO- parar de ser mau'
fonte
0

Como está um pouco oculto no @Gilles, responda a maneira rápida de carregar o zsh sem nenhuma configuração, por exemplo, .zshrc .zshenv etc.

zsh -f

Isso é útil quando você deseja testar se alguma coisa na sua configuração está impedindo que algum recurso do zsh funcione.

zzapper
fonte