¿Cómo cambiar el shell predeterminado en Cygwin?

29

Estoy tratando de cambiar mi shell predeterminado de bash a zsh en cygwin.

  1. El comando normal de Unix chshno está disponible en Cygwin
  2. El archivo etc / passwd parece que ya no se usa en versiones existentes de cygwin.

Entonces, ¿cómo más se puede cambiar el shell predeterminado?

gyaani_guy
fuente

Respuestas:

22

La respuesta depende de cómo comiences Cygwin.

Si inicia Cygwin con Cygwin.bat , modifique la última línea de /Cygwin.bat(generalmente C:\cygwin\o C:\cygwin64\).

Si inicia Cygwin con mintty , agregue el shell como parámetro. mintty /usr/bin/zsh -

Steven
fuente
2
Gracias, estoy usando Conemu. Tuve que cambiar sh.exea zsh.exeen Configuración de Conemu> inicio> tareas> bash Cygwin Bash>set CHERE_INVOKING=1 & %ConEmuDrive%\CygWin\bin\sh.exe --login -i
gyaani_guy
@ gyaani_guy Solo estoy usando ConEmu para ejecutar CygWin\bin\zsh.exe. sh.exe --loginlanzará Bash, ¿cómo cambias eso? ¿O no importa de todos modos? Me imagino que sh.exe --logines innecesariamente la ejecución de shantes zsh...
deed02392
@ deed02392 No estoy seguro de entender ... pero el comando exacto que estoy usando es set CHERE_INVOKING=1 & %ConEmuDrive%\CygWin\bin\zsh.exe --login -ihth
gyaani_guy
@ gyaani_guy gracias, estaba confundido porque en tu primer comentario parecía implicar que comenzaste con zsh sh.exe. Ahora me doy cuenta de que simplemente no leí tu mensaje correctamente :-)
deed02392
3
El pequeño ejemplo no funcionó para mí. Tenía problemas hasta que hice un shell de entrada mediante la adición de -l: mintty.exe -i /Cygwin-Terminal.ico /usr/bin/zsh -l -
Morgan de mayo de
18

Si ejecuta mintty.exedirectamente o ejecuta Cygwin Terminal desde el menú de inicio o el escritorio (que es un acceso directo a mintty.exe), puede establecer la variable de entorno SHELL en Windows en /usr/bin/zsh.

En Windows 7:

  1. Presione la tecla de Windows.
  2. Comience a escribir "entorno".
  3. Cuando aparezca, seleccione "Editar variables de entorno para su cuenta".

El resto debe explicarse por sí mismo.

dc46and2
fuente
55
Esto realmente necesita más votos positivos. Nunca he visto esto documentado en ningún lado, y obviamente es el método previsto.
Kevin Mills
1
Para aquellos que no desean confiar en la búsqueda para encontrar el panel apropiado, haga clic derecho en el menú Inicio y seleccione "Sistema" para iniciar el panel de control del sistema. Luego haga clic en "Configuración avanzada del sistema" en la columna del lado izquierdo. En la ventana "Propiedades del sistema" que aparece, haga clic en "Variables de entorno ..." para iniciar el editor de variables de entorno.
David C.
Funcionó perfectamente!
bkunzi01
16

Copiado de mi respuesta en Stack Overflow :


En lugar de crear un archivo passwd, que Cygwin recomienda contra 1 , puede editar /etc/nsswitch.conf . Agregue o edite la siguiente línea:

db_shell: / usr / bin / fish

El lado negativo de este método es que, si tiene varios usuarios, este cambio los afecta a todos. El lado positivo es que es muy simple. El único inconveniente es que tienes que reiniciar Cygwin.

Si haces uso mkpasswd después de este cambio, utilizará su nuevo shell por defecto para todos los usuarios que tienen permiso para iniciar la sesión.


1 La documentación de mkpasswd dice esto:

No use este comando para generar un archivo local / etc / passwd, a menos que realmente necesite uno. Consulte la Guía del usuario de Cygwin para obtener más información.

Realmente no puedo encontrar ningún razonamiento sólido en la guía del usuario , aparte de una mención de que tendrá que regenerar los archivos / etc / passwd y / etc / group si sus usuarios y grupos cambian, lo que supongo que es lo suficientemente decente razón. Puedo decir que el proceso es algo propenso a errores para los novatos.

Papi
fuente
7

Este es un truco: pon esto como la primera línea de tu ~/.bash_profile:

exec zsh
Glenn Jackman
fuente