Busque aquí la excelente explicación y solución publicada por @ mklement0 [en relación con un bash
problema de actualización.
Tuve un problema similar al hacer lo contrario en mi sistema (OS X 10.10.1): hacer bash
el shell de inicio de sesión predeterminado nuevamente después de haberlo instalado oh-my-zsh
, lo que hizo zsh
el predeterminado, y luego actualizar bash
de 3.2.53 a 4.3.30 usando Homebrew ( ¿Por qué Apple envía Yosemite con una bash
versión anterior?).
Creo que la SHELL
variable de entorno refleja pero no controla el shell de inicio de sesión predeterminado real para el usuario. Por ejemplo, si, por ejemplo, bash
era su valor predeterminado y abre una nueva bash
ventana de shell desde la terminal, entonces $ export SHELL="/bin/zsh"; echo "$SHELL"
se mostrará /bin/zsh
pero 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
( $0
contiene 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 UserShell
propiedad 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/zsh
hace es cambiar esta UserShell
propiedad para establecerla zsh
: puede verificar esto haciendo dscl . -read /Users/$USER/ UserShell
inmediatamente 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 - $USER
lo 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.