Busque aquí para obtener una excelente explicación y solución publicada por @ mklement0 [en relación con un problema de actualización bash
.
Tuve un problema similar al hacer lo contrario en mi sistema (OS X 10.10.1): hacer que bash
vuelva a ser el shell de inicio de sesión predeterminado después de haber instalado oh-my-zsh
, que hizo que zsh
fuera el valor predeterminado, y luego actualizar bash
de 3.2.53 a 4.3.30 usando Homebrew (¿por qué Apple está enviando a Yosemite con una versión antigua de bash
?).
Creo que la variable de entorno SHELL
refleja, pero no controla el shell de inicio de sesión predeterminado real para el usuario. Por ejemplo, si, digamos, bash
era su valor predeterminado y abre una nueva ventana de shell bash
desde el terminal, entonces $ export SHELL="/bin/zsh"; echo "$SHELL"
mostrará /bin/zsh
pero no se producirá ningún cambio real porque si abre una nueva ventana de shell desde el terminal y hacer $ echo $0
, entonces vería -bash
( $0
contiene el nombre y la ruta del comando que inició la ventana de shell, en este caso bash
, y el -
al lado indica que es un shell de inicio de sesión).
Como @ mklement0 señaló, el shell de inicio de sesión predeterminado real para el usuario está controlado por la propiedad UserShell
en el registro del usuario en la base de datos interna del sistema. Esto se puede consultar y actualizar usando 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/zsh
hace es cambiar esta propiedad UserShell
para establecerla en zsh
. Puedes verificar esto haciendo dscl . -read /Users/$USER/ UserShell
inmediatamente después, y verás UserShell: /bin/zsh
. Pero el cambio se no se realiza en la ventana actual, hasta que haga algo como exec su - $USER
como lo sugiere @ mklement0, o hasta que cierre y abra una ventana de shell.