Procure aqui a excelente explicação e solução postada por @ mklement0 [em relação a um bashproblema de atualização.
Eu tive um problema semelhante ao fazer o oposto no meu sistema (OS X 10.10.1): criar basho shell de login padrão novamente após a instalação oh-my-zsh, que fez zsho padrão e, em seguida, atualizar bashde 3.2.53 para 4.3.30 usando o Homebrew ( por que a Apple está enviando Yosemite com uma bashversão antiga ?).
Eu acho que a SHELLvariável de ambiente reflete, mas não controla o shell de login padrão real para o usuário. Por exemplo, se, por exemplo, bashfosse o seu padrão e você abrir uma nova bashjanela do shell do terminal, $ export SHELL="/bin/zsh"; echo "$SHELL"isso mostraria, /bin/zshmas nenhuma alteração real ocorrerá, porque se você abrir uma nova janela do shell do terminal e o fizer $ echo $0, verá -bash( $0conté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 UserShellpropriedade 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/zshfaz é alterar essa UserShellpropriedade para configurá-la zsh- você pode verificar isso fazendo dscl . -read /Users/$USER/ UserShellimediatamente 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 - $USERsugerido 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.