Respuestas:
A menos que esté usando cygwin como un entorno multiusuario (en cuyo caso, use chsh
como lo haría en un entorno estándar).
De lo contrario, simplemente cambie cygwin.bat para que se ejecute en zsh -l -i
lugar de bash --login -i
y 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 .bat
archivos para cargar diferentes shells. ( sh
, ksh
, csh
, fish
Etc.)
Sentí que debería actualizar esto para proporcionar información sobre cómo hacerlo sin chsh
hacerlo aún en el extremo de Unix. Edite el /etc/passwd
archivo y reemplace las ocurrencias de /bin/bash
con /bin/zsh
. (Esto es efectivamente lo chsh
que haría, pero de esta manera lo haría para todos los usuarios de una vez).
mkpasswd -l -p "$(cygpath -H)" > /etc/passwd
y edita el /etc/passwd
archivo recién creado
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.
Solo agrego el bin
directorio 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.
/bin/zsh
lugar de zsh
.
the bin directory in the cygwin directory to my Windows Path Environment Variable
funciona sin este cambio para mí
i
no es necesaria, ya que será un shell de entrada y no interactive
.
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.
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/zsh
y 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 SHELL
con el valor /usr/bin/zsh
. Luego, vuelva a aceptar todo eso y comience un nuevo mintty.
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