Tornando o Shell padrão do ZSH no MacOSX [fechado]


98

Eu instalei o zsh no meu Mac. e agora quero torná-lo o shell padrão em vez do Bash. Mas parece que estou encontrando o seguinte erro:

$ echo $SHELL
/bin/bash
$ chsh -s /usr/bin/zsh
Changing shell for harshamv.
Password for harshamv:
chsh: /usr/bin/zsh: non-standard shell

1
O que produz chsh -l? (Se isso não funcionar, qual é o conteúdo de /etc/shells?) Tem certeza de que está falhando e não apenas um aviso? Adicionar /usr/bin/zshlá faz com que funcione?
Etan Reisner

1
chsh: a opção requer um argumento - l uso: chpass [-l local] [-u authname] [-s shell] [usuário]
Harsha MV

/ bin / bash / bin / csh / bin / ksh / bin / sh / bin / tcsh / bin / zsh
Harsha MV

O que há de errado /bin/zsh?
jxh

1
Existe uma maneira oficial de alterar o shell padrão para zsh agora. Consulte o documento da Apple "Use zsh como o shell padrão em seu Mac" support.apple.com/en-ca/HT208050
Anthonyeef

Respostas:


86

3 etapas fáceis:

  1. which zshisso lhe dá seu caminho para zsh
  2. Em seguida, chsh -s /bin/zshou substitua o caminho para o seu zsh se for diferente
  3. Reinicie sua máquina

Sim, funcionou. é específico do Yosemite?
Harsha MV

2
Não, eu não acho, foi apenas para sua informação :)
Quentin Perez

8
Outro comentário relevante sobre a mesma questão mais antiga que diz adicionar /usr/bin/zshpara /etc/shellsresolver o problema.
Brice

Funciona perfeitamente
Olkunmustafa

1
Defina-o de acordo com / etc / shells! Procure o caminho zsh com '$ nano / etc / shells'. O meu estava em / bin / zsh em vez de / usr / bin / zsh em 10.12.2
oikonomopo

187

A resposta correta deveria ter resolvido seu problema:

chsh: / usr / bin / zsh: shell não padrão

Este é o caso porque chshsó aceitará shells que são definidos no arquivo / etc / shells, como você pode ver lendo o manual para chsh:

chsh aceitará o nome de caminho completo de qualquer arquivo executável no sistema. No entanto, ele emitirá um aviso se o shell não estiver listado no arquivo / etc / shells.

Para resolver esse problema e tornar o zsh o shell padrão, você deve:

$ sudo echo "$(which zsh)" >> /etc/shells
$ chsh -s $(which zsh)

Obviamente, suponho que zshesteja em seu caminho aqui. Essa solução também funcionará se você, por exemplo, optar por instalar a última zshcom brew install zsh.

EDIT (obrigado por ThisIsFlorianK pelo comentário) :

Dependendo da configuração do seu shell, você pode receber uma mensagem dizendo /etc/shells: Permission denied. Você pode encontrar informações sobre este assunto aqui. Para contornar isso, use o seguinte:

$ sudo sh -c "echo $(which zsh) >> /etc/shells"
$ chsh -s $(which zsh)

4
esta é mais precisa do que a resposta aceita em minha opinião. assumindo que zsh está instalado em / usr / bin / zsh, as outras respostas não funcionam. Eles funcionaram para OP porque, por padrão, a Apple instala o zsh em / bin / zsh. No entanto, se você quiser usar o zsh do homebrew (instalado em / usr / local / bin / zsh), essa seria a maneira correta de fazer isso
verboze

Eu tenho "bash: / etc / shells: Permission denied". A resposta via Preferências do Sistema funcionou para mim.
Ricardo Stuven

44
Se você receber /etc/shells: Permission denied==> Faça isso: sudo sh -c "echo $(which zsh) >> /etc/shells"
ThisIsFlorianK de

1
stackoverflow.com/a/44547726/99834 - funcionou sem mexer com os arquivos do sistema. A única coisa que falta é uma pessoa CLI para fazer a mesma operação.
Sorin

@sorin Isso é vandalismo gratuito ou há algo realmente errado com a resposta? Os arquivos de sistema são arquivos de texto editáveis ​​por um motivo. chshestá disponível por padrão por um motivo. Embora não haja nada de intrinsecamente errado em clicar em vários menus para realizar a mesma coisa, isso não só é impossível de ser transportado e está sujeito a erros, mas também é enganoso, pois se esconde dos usuários de onde vem a mudança.
dangom

52

Consegui fazer isso funcionar da seguinte maneira:

  1. Vá para Preferências do Sistema
  2. Clique em "Usuários e Grupos"
  3. Clique no cadeado para fazer alterações.
  4. Clique com o botão direito no usuário atual -> Opções avançadas
  5. Altere o shell de login para / bin / zsh no menu suspenso.
  6. Abra um novo terminal e verifique com echo $SHELL

4
se você instalar o zsh via homebrew, ele o colocará /usr/local/bin/zsh. Portanto, você precisará editar /etc/shellsno sudo e adicionar uma entrada para /usr/local/bin/zshantes de selecionar o executável zsh que o hombrew instalou
Baldy

7

No meu MacBook de trabalho, tive que fazer o seguinte:

sudo chsh -s /usr/local/bin/zsh my_user_name

Então eu tive que criar um .bash_profilearquivo para fazer meu terminal mudar para z-shell toda vez que eu abri-lo:

touch ~/.bash_profile
echo 'export SHELL=$(which zsh)' >> ~/.bash_profile
echo 'exec $(which zsh) -l' >> ~/.bash_profile

A última ideia foi emprestada daqui .

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.