Réponses:
Sauf si vous utilisez cygwin comme environnement multi-utilisateur (dans ce cas, utilisez-le chsh
comme vous le feriez dans un environnement standard.)
Sinon, il suffit de changer le fichier cygwin.bat pour qu'il s'exécute zsh -l -i
au lieu de bash --login -i
et il fonctionnera comme un shell de connexion.
Bien sûr, si vous souhaitez exécuter plusieurs shells dès le démarrage, créez simplement un ensemble de .bat
fichiers pour charger différents shells. ( sh
, ksh
, csh
, fish
Etc.)
J'ai senti que je devrais mettre à jour ceci pour fournir des informations sur le faire sans pour autant le chsh
faire sous Unix. Editez le /etc/passwd
fichier et remplacez les occurrences de /bin/bash
par /bin/zsh
. (C'est effectivement ce que chsh
feraient les choses, mais de cette façon, vous le feriez pour tous les utilisateurs en une fois.)
mkpasswd -l -p "$(cygpath -H)" > /etc/passwd
et édite le nouveau /etc/passwd
fichier créé
Si j'ai bien lu votre question, vous cherchez autre chose que ce que chere fournit (ce qui, d’accord, est plutôt cool en soi).
La version actuelle de Cygwin ne contient pas de fichier / etc / passwd et le système sur lequel je travaille possède des informations de compte Windows dans une base de données de domaine hors de mon contrôle. Par conséquent, chsh n'est plus pris en charge.
J'ai également constaté que bash n'est pas codé en dur dans le script startxwin , ni dans aucun fichier .bat. Il s'avère que vous n'avez pas besoin de manipuler les fichiers .bat du tout.
Cherchant comment changer de shell, j'ai trouvé des conseils sur mkpasswd
Je l'ai ajouté au mélange.
La page de manuel disait:
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.
(Je ne sais pas pourquoi l'espacement est si "off" ...)
J'ai ensuite utilisé la commande suivante:
mkpasswd -c | sed -e 'sX / bashX / zshX' | tee -a / etc / passwd
La prochaine fois que vous ouvrirez un terminal Cygwin, il ira directement à zsh
Et je pense que c'est ce que vous avez demandé.
Je viens d'ajouter le bin
répertoire du répertoire cygwin à ma variable d'environnement de chemin Windows, puis de créer un raccourci vers:
mintty.exe -i /Cygwin-Terminal.ico /bin/zsh --login
ou changez simplement le raccourci par défaut du menu de démarrage de cygwin.
/bin/zsh
au lieu de zsh
.
the bin directory in the cygwin directory to my Windows Path Environment Variable
fonctionne sans ce changement pour moi
i
n'est pas nécessaire car ce sera un shell de connexion et non interactive
.
Copié de ma réponse sur le dépassement de pile :
Au lieu de créer un fichier passwd, qui Cygwin recommande contre 1 , vous pouvez modifier /etc/nsswitch.conf . Ajoutez ou modifiez la ligne suivante:
db_shell: / usr / bin / zsh
Le côté bas / haut de cette méthode est que, si vous avez plusieurs utilisateurs, cette modification les affecte tous. Le bon côté, c'est que c'est simple comme bonjour. Le seul problème est que vous devez redémarrer Cygwin.
Si vous faites usage mkpasswd après ce changement, il utilisera votre nouveau shell par défaut pour tous les utilisateurs qui sont autorisés à se connecter.
1 La documentation de mkpasswd dit ceci:
N'utilisez pas cette commande pour générer un fichier / etc / passwd local, sauf si vous en avez réellement besoin. Consultez le Guide de l'utilisateur Cygwin pour plus d'informations.
Je ne trouve pas vraiment de motivation solide dans le guide de l’ utilisateur , si ce n’est une mention selon laquelle vous devrez régénérer les fichiers / etc / passwd et / etc / group si vos utilisateurs et vos groupes changent, ce qui, je suppose, est assez correct raison. Je peux dire que le processus est quelque peu sujet aux erreurs pour les débutants.
En supposant que vous souhaitiez changer le shell utilisé dans mintty / Cygwin Terminal, il vérifie d'abord la variable d'environnement SHELL, puis le fichier passwd (désormais inexistant), puis revient à / bin / sh, ce qui semble être le cas. par défaut.
J'ai été en mesure de définir la variable d'environnement SHELL dans Windows sur /usr/bin/zsh
et cela a fonctionné sans autre changement. Je viens de le changer pour mon utilisateur Windows, pas globalement.
La définition d'une variable d'environnement varie probablement selon les versions de Windows. Essayez de rechercher "environnement" dans votre panneau de configuration Windows. Pour moi, sous Windows 7, c’était Panneau de configuration → Système → Paramètres système avancés, ce qui ouvrait le panneau de configuration / la boîte de dialogue Propriétés système, puis l’onglet Avancé, puis le bouton Variables d’environnement, qui ouvrait la boîte de dialogue Variables d’environnement, puis créait une nouvelle variable utilisateur nommée SHELL
avec la valeur /usr/bin/zsh
. Puis OK, quittez tout cela et démarrez une nouvelle menthe.
Je pensais juste que j'ajouterais cette réponse au cas où cela aiderait ceux qui le recherchent. Si vous utilisez chere (qui ajoute une option "Invite Bash ici" au menu contextuel contextuel d'un dossier), vous pouvez le définir sur zsh ("Invite Zsh ici") avec:
chere -i -t mintty -s zsh