chsh no cambia $ SHELL

9

Tengo algunas dificultades para cambiar el valor de $SHELLla aplicación iTerm de OSX. iTerm está comenzando /bin/zsh, pero el valor de $SHELLno parece cambiar.

Qué he hecho:

  1. Se modificó el "comando" como /bin/zshen la ventana de configuración de iTerm.
  2. Ejecutado chshpara cambiar el shell a /bin/zsh.
  3. ITerm confirmado se inicia en /bin/zsh

NOTA # 1: En la aplicación de terminal de stock de OSX, "Terminal.app":

echo $SHELL
/bin/zsh

NOTA # 2: En la popular aplicación de terminal de OSX, "iTerm.app":

$ echo $SHELL
/bin/bash

$ echo $USER
$ melvkim

$ chsh -s /bin/zsh
Changing shell for melvkim.
Password for melvkim:
chsh: no changes made
melvynkim
fuente
1
¿Has mirado adentro /etc/shells? El manual establece que si el shell que especifica no está en ese archivo, no se considera un shell estándar.
Bob Dalgleish

Respuestas:

5

El problema era la configuración conflictiva de la aplicación "iTerm" con el shell. Para resolverlo, restablecí el comando "shell de inicio de sesión" en la ventana de preferencias de iTerm:

iTerm.app -> Preferencias -> Perfiles -> General -> Comando -> Haga clic en "Shell de inicio de sesión"

Luego, ejecuté chshpara modificarlo como /bin/zsh.

Para reproducir el problema (con $ SHELL configurado como /bin/bash/, aunque el shell de inicio de sesión lo es /bin/zsh), solo tuve que cambiar la configuración de "iTerm" de nuevo a "Comando: / bin / zsh /".

melvynkim
fuente
1

El -sindicador chshsolo intenta cambiar el shell, y probablemente falla debido a Open Directory: el sistema habitual de UNIX 'chsh' modificaría la /etc/passwdentrada. Sin embargo, pude ejecutar chshsin argumentos, lo que me dio un editor y la siguiente información:

# Changing user information for nevin.
# Use "passwd" to change the password.
##
# Open Directory: /Local/Default
##
Shell: /bin/tcsh
Full Name: Nevin Williams
Office Location:
Office Phone:
Home Phone:

Pude editar la entrada "Shell:" /bin/zshy las ventanas de Terminal posteriores se abrieron con un indicador de Z-shell.

Nevin Williams
fuente
Lo intenté chshsin argumentos. Aún sin suerte. La variable no cambia. De hecho, cuando se cargó el editor, se mostró /bin/zsh.
melvynkim
Intenta cambiar el shell con el editor. Hice una captura de pantalla de mí cambiando de / bin / tcsh a / bin / zsh y viceversa. bonmot.ca/~nevin/chsh.mov
Nevin Williams
¡Muchas gracias por tomarse el tiempo de grabar su screencast! Se supone que su solución funciona en otros emuladores de terminal, pero no pude cambiar $SHELLen iTerm. Por favor, consulte mi respuesta para más detalles ... ¡Gracias!
melvynkim
1

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.

ramius
fuente
0

Intente ejecutar el comando: chsh -s /bin/zshdesde el terminal Mac predeterminado.

mohitmayank
fuente
1
¿Qué hace esto diferente al OP?
JMY1000
@ JMY1000 Si intenta ejecutar ese comando desde iTerm, los cambios no se reflejan. Debería poder hacerlo funcionar ejecutándolo desde el terminal predeterminado de Mac.
mohitmayank