zsh con Cygwin

Respuestas:

45

A menos que esté usando cygwin como un entorno multiusuario (en cuyo caso, use chshcomo lo haría en un entorno estándar).

De lo contrario, simplemente cambie cygwin.bat para que se ejecute en zsh -l -ilugar de bash --login -iy se ejecutará como un shell de inicio de sesión.  

Por supuesto, si desea ejecutar varios shells desde el inicio, simplemente cree un conjunto de .batarchivos para cargar diferentes shells. ( sh, ksh, csh, fishEtc.)

Actualizar...

Sentí que debería actualizar esto para proporcionar información sobre cómo hacerlo sin chshhacerlo aún en el extremo de Unix. Edite el /etc/passwdarchivo y reemplace las ocurrencias de /bin/bashcon /bin/zsh. (Esto es efectivamente lo chshque haría, pero de esta manera lo haría para todos los usuarios de una vez).

ocodo
fuente
15
Ya no hay un / etc / passwd en cygwin por defecto, y chsh ya no es compatible. Esta respuesta no ayuda (10 de abril de 2014).
Jeff Snider
Vete a casa @ THESorcerer estás borracho
ocodo
2
@JeffSnider ejecuta mkpasswd -l -p "$(cygpath -H)" > /etc/passwdy edita el /etc/passwdarchivo recién creado
BrunoLM
17

Si leí bien su pregunta, está buscando algo más que los suministros de chere (que, por supuesto, es bastante bueno por derecho propio).

La versión actual de Cygwin no tiene un archivo / etc / passwd , y el sistema en el que estoy trabajando tiene información de la cuenta de Windows en una base de datos de dominio fuera de mi control. En consecuencia, chsh ya no es compatible.

También descubrí que bash no está codificado en el script startxwin , ni está codificado en ningún archivo .bat. Resulta que no necesitas jugar con los archivos .bat en absoluto.

Buscando cómo cambiar mi shell, encontré algunos consejos sobre mkpasswd

Lo agregué a la mezcla.

La página del manual decía:

SYNOPSIS
   mkpasswd [OPTIONS]...

OPTIONS
   Don't use this command to generate a local /etc/passwd file, unless you
   really need one.  See the Cygwin User's Guide for more information.

   -c,--current
          Print current user.

  DESCRIPTION
        The   mkpasswd  program can be used to create a        /etc/passwd
   file.  Cygwin doesn't need  this  file,        because  it  reads  user
   information  from  the Windows account databases,       but you can add
   an  /etc/passwd file, for instance       if your machine is often  dis‐
   connected from its domain controller.

        Note  that this information is static, in contrast to the informa‐
   tion       automatically gathered by Cygwin from  the  Windows  account
   databases.  If        you  change  the user information on your system,
   you'll need to regenerate       the passwd file for it to have the  new
   information.


        For  very  simple needs, an entry for the current user can be cre
   ated       by using the option  -c.

(No sé por qué el espacio está tan "apagado" ...)

Luego usé el siguiente comando:

mkpasswd -c | sed -e 'sX / bashX / zshX' | tee -a / etc / passwd

La próxima vez que abra una Terminal Cygwin, irá directamente a zsh

Y eso, creo, es lo que pediste.

David L. Paktor
fuente
17

Solo agrego el bindirectorio en el directorio cygwin a mi variable de entorno de ruta de Windows y luego creo un acceso directo para:

mintty.exe -i /Cygwin-Terminal.ico /bin/zsh --login

o simplemente cambie el acceso directo predeterminado del menú de inicio de cygwin al mismo.

Justin Buser
fuente
2
Tuve que usar en /bin/zshlugar de zsh.
kraiz
1
the bin directory in the cygwin directory to my Windows Path Environment Variablefunciona sin este cambio para mí
ruslo
la ino es necesaria, ya que será un shell de entrada y no interactive.
Timo
7

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 / zsh

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
Esto debe marcarse como aceptado.
Arda
4

Suponiendo que esté interesado en cambiar el shell utilizado en mintty / Cygwin Terminal, primero verifica la variable de entorno SHELL, luego el archivo passwd (ahora inexistente), luego vuelve a / bin / sh, que es lo que parece estar haciendo. por defecto.

Yo era capaz de establecer la variable de entorno SHELL en Windows a /usr/bin/zshy funcionó sin ningún otro cambio. Lo acabo de cambiar para mi usuario de Windows, no globalmente.

Establecer una variable de entorno probablemente varía para las diferentes versiones de Windows. Intente buscar "entorno" en su Panel de control de Windows. Para mí, en Windows 7, fue Panel de control → Sistema → Configuración avanzada del sistema, que muestra el panel / cuadro de diálogo Propiedades del sistema, luego la pestaña Avanzado, luego el botón Variables de entorno, que muestra el cuadro de diálogo Variables de entorno, luego crea una nueva variable de usuario llamado SHELLcon el valor /usr/bin/zsh. Luego, vuelva a aceptar todo eso y comience un nuevo mintty.

wfaulk
fuente
¡Ahora esto debería ser votado profusamente! ¡La forma más sencilla que no se mete con las maquinaciones internas de Cygwin, y fácilmente reversible!
pepoluan
1

Solo pensé en agregar esta respuesta en caso de que ayude a cualquiera que la esté buscando. Si usa chere (que agrega una opción "Bash prompt here" al menú contextual del botón derecho del mouse de cualquier carpeta), puede configurarlo en zsh ("Zsh Prompt Here") con:

chere -i -t mintty -s zsh
Mike HR
fuente
0

Si desea utilizar el shell Cygwin dentro del IDE Intellij, use la siguiente configuración dentro de la configuración / herramientas / terminal

c:\cygwin\bin\zsh.exe -l -i

Esto incrustará el shell cygwin dentro de intellij en lugar de generar una nueva ventana

serup
fuente