Procure aqui a excelente explicação e solução postada por @ mklement0 [em relação a um bash
problema de atualização.
Eu tive um problema semelhante ao fazer o oposto no meu sistema (OS X 10.10.1): criar bash
o shell de login padrão novamente após a instalação oh-my-zsh
, que fez zsh
o padrão e, em seguida, atualizar bash
de 3.2.53 para 4.3.30 usando o Homebrew ( por que a Apple está enviando Yosemite com uma bash
versão antiga ?).
Eu acho que a SHELL
variável de ambiente reflete, mas não controla o shell de login padrão real para o usuário. Por exemplo, se, por exemplo, bash
fosse o seu padrão e você abrir uma nova bash
janela do shell do terminal, $ export SHELL="/bin/zsh"; echo "$SHELL"
isso mostraria, /bin/zsh
mas nenhuma alteração real ocorrerá, porque se você abrir uma nova janela do shell do terminal e o fizer $ echo $0
, verá -bash
( $0
contém o nome e o caminho do comando que iniciou a janela do shell, nesse caso bash
, e o -
próximo indica que é um shell de logon).
Como @ mklement0 apontou, o shell de login padrão real para o usuário é controlado pela UserShell
propriedade no registro do usuário no banco de dados interno do sistema - isso pode ser consultado e atualizado usando o utilitário de linha de comando dscl
. Essas informações serão passadas para o aplicativo do terminal quando você abrir uma janela do shell.
O que chsh -s /bin/zsh
faz é alterar essa UserShell
propriedade para configurá-la zsh
- você pode verificar isso fazendo dscl . -read /Users/$USER/ UserShell
imediatamente depois e verá UserShell: /bin/zsh
. Mas a alteração não é efetuada na janela atual, até que você faça algo como exec su - $USER
sugerido por @ mklement0, ou até fechar e abrir uma janela do shell.
/etc/shells
? O manual declara que, se o shell que você especificar não estiver nesse arquivo, ele não será considerado um shell padrão.