Busque aquí la excelente explicación y solución publicada por @ mklement0 [en relación con un bashproblema de actualización.
Tuve un problema similar al hacer lo contrario en mi sistema (OS X 10.10.1): hacer bashel shell de inicio de sesión predeterminado nuevamente después de haberlo instalado oh-my-zsh, lo que hizo zshel predeterminado, y luego actualizar bashde 3.2.53 a 4.3.30 usando Homebrew ( ¿Por qué Apple envía Yosemite con una bashversión anterior?).
Creo que la SHELLvariable de entorno refleja pero no controla el shell de inicio de sesión predeterminado real para el usuario. Por ejemplo, si, por ejemplo, bashera su valor predeterminado y abre una nueva bashventana de shell desde la terminal, entonces $ export SHELL="/bin/zsh"; echo "$SHELL"se mostrará /bin/zshpero no se producirá ningún cambio real porque si abre una nueva ventana de shell desde la terminal y lo hace $ echo $0, verá -bash( $0contiene el nombre y la ruta del comando que inició la ventana de shell, en este caso bash, y al -lado indica que es un shell de inicio de sesión).
Como @ mklement0 señaló que el shell de inicio de sesión predeterminado real para el usuario está controlado por la UserShellpropiedad en el registro del usuario en la base de datos interna del sistema; esto se puede consultar y actualizar mediante la utilidad de línea de comandos dscl. Esta información pasará a su aplicación de terminal cuando abra una ventana de shell.
Lo que chsh -s /bin/zshhace es cambiar esta UserShellpropiedad para establecerla zsh: puede verificar esto haciendo dscl . -read /Users/$USER/ UserShellinmediatamente después, y verá UserShell: /bin/zsh. Pero el cambio no se efectúa en la ventana actual, hasta que haga algo como exec su - $USERlo sugerido por @ mklement0, o hasta que cierre y abra una ventana de shell.
/etc/shells? El manual establece que si el shell que especifica no está en ese archivo, no se considera un shell estándar.