Comment configurer zsh pour qu'il soit le shell par défaut sous Cygwin?
Sauf si vous utilisez cygwin en tant qu’environnement multi-utilisateur (dans ce cas, utilisez chsh
comme vous le feriez dans un environnement standard.)
Sinon, il suffit de changer le fichier cygwin.bat pour qu'il exécute zsh -l -i
au lieu de bash --login -i
et il fonctionnera en tant que shell de connexion.
Bien sûr, si vous souhaitez exécuter plusieurs shells dès le démarrage, créez simplement un ensemble de fichiers .bat
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 fait de faire ceci sans chsh
tout en le faisant sous Unix. Editez le fichier /etc/passwd
et remplacez les occurrences de /bin/bash
par /bin/zsh
. (C’est effectivement ce que chsh
ferait, mais de cette façon, vous le feriez pour tous les utilisateurs en une fois.)
Je viens d'ajouter le répertoire bin
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.
Si je lis bien votre question, vous recherchez autre chose que ce que chere fournit (ce qui, bien sûr, 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 les 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 à changer mon 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é.
Copié de ma réponse sur le dépassement de capacité de la pile :
Au lieu de créer un fichier passwd, ce que Cygwin recommande de ne pas utiliser1, vous pouvez éditer /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 utilisez mkpasswd après cette modification, il utilisera votre nouveau shell par défaut pour tous les utilisateurs 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 raison solide dans le guide de l'utilisateur , mis à part le fait que vous devrez régénérer le fichier/etc/passwd et/etc/groupe de fichiers si vos utilisateurs et groupes changent, ce qui, je suppose, est une raison assez décente. 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 du shell, puis le fichier passwd (maintenant 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 modification. 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, il s’agissait de Panneau de configuration → Système → Paramètres système avancés, qui affiche le panneau de configuration/la boîte de dialogue Propriétés système, puis sur l’onglet Avancé, puis le bouton Variables d’environnement, qui ouvre la boîte de dialogue Variables d’environnement, puis crée 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 tous 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
Si vous souhaitez utiliser Cygwin Shell dans IDE Intellij, utilisez la configuration suivante dans settings/tools/terminal.
c:\cygwin\bin\zsh.exe -l -i
Cela intégrera le shell cygwin dans intellij au lieu de créer une nouvelle fenêtre.