Comment changer le shell par défaut dans Cygwin?


29

J'essaie de changer mon shell par défaut de bash en zsh dans cygwin.

  1. La commande Unix normale chshn'est pas disponible sur cygwin
  2. Il semble que le fichier etc / passwd ne soit plus utilisé dans les versions existantes de cygwin.

Alors, comment changer le shell par défaut?

Réponses:


22

La réponse dépend de la façon dont vous démarrez Cygwin.

Si vous démarrez Cygwin avec Cygwin.bat , modifiez la dernière ligne de /Cygwin.bat(généralement C:\cygwin\ou C:\cygwin64\).

Si vous démarrez Cygwin avec mintty , puis ajoutez le shell en tant que paramètre. mintty /usr/bin/zsh -


2
Merci, j'utilise Conemu. Nous avons dû changer sh.exeà zsh.exedans Conemu Paramètres> Démarrage> Tâches> bash Cygwin Bash>set CHERE_INVOKING=1 & %ConEmuDrive%\CygWin\bin\sh.exe --login -i
gyaani_guy

@gyaani_guy J'utilise juste ConEmu pour exécuter CygWin\bin\zsh.exe. sh.exe --loginva lancer Bash, comment changez-vous cela? Ou cela n'a-t-il pas d'importance de toute façon? J'imagine qu'il sh.exe --logins'exécute inutilement shavant zsh...
deed02392

@ deed02392 Je ne suis pas sûr de comprendre .. mais la commande exacte que j'utilise est set CHERE_INVOKING=1 & %ConEmuDrive%\CygWin\bin\zsh.exe --login -ihth
gyaani_guy

@gyaani_guy merci, j'étais confus parce que dans votre premier commentaire vous sembliez impliquer que vous commenciez zsh avec sh.exe. Maintenant, je me rends compte que je n'ai tout simplement pas lu votre message correctement :-)
deed02392

3
L'exemple de menthe n'a pas tout à fait fonctionné pour moi. Il y avait des problèmes jusqu'à ce que j'en fasse un shell de connexion en ajoutant -l: mintty.exe -i /Cygwin-Terminal.ico /usr/bin/zsh -l -
Morgan

18

Si vous exécutez mintty.exedirectement ou exécutez Cygwin Terminal à partir du menu Démarrer ou du bureau (qui est un raccourci vers mintty.exe), vous pouvez définir la variable d'environnement SHELL dans Windows sur /usr/bin/zsh.

Sous Windows 7:

  1. Appuyez sur la touche Windows.
  2. Commencez à taper "environnement".
  3. Lorsqu'il apparaît, sélectionnez "Modifier les variables d'environnement pour votre compte".

Le reste devrait être explicite.


5
Cela nécessite sérieusement plus de votes positifs. Je n'ai jamais vu cela documenté nulle part, et c'est évidemment la méthode prévue.
Kevin Mills

1
Pour ceux qui ne veulent pas se fier à la recherche pour trouver le panneau approprié, cliquez avec le bouton droit sur le menu Démarrer et sélectionnez "Système" pour lancer le panneau de configuration du système. Cliquez ensuite sur "Paramètres système avancés" dans la colonne de gauche. Dans la fenêtre "Propriétés système" qui apparaît, cliquez sur "Variables d'environnement ..." pour lancer l'éditeur de variables d'environnement.
David C.

Fonctionne parfaitement!
bkunzi01

16

Copié de ma réponse sur Stack Overflow :


Au lieu de créer un fichier passwd, ce que Cygwin recommande contre 1 , vous pouvez éditer /etc/nsswitch.conf . Ajoutez ou modifiez la ligne suivante:

db_shell: / usr / bin / fish

L'inconvénient de cette méthode est que si vous avez plusieurs utilisateurs, cette modification les affecte tous. Le côté positif / positif est que c'est très simple. Le seul hic, c'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 vraiment besoin. Voir le Guide de l'utilisateur Cygwin pour plus d'informations.

Je ne trouve pas vraiment de raisonnement solide dans le guide de l' utilisateur , à part une mention selon laquelle vous devrez régénérer les fichiers / etc / passwd et / etc / group si vos utilisateurs et groupes changent, ce qui, je suppose, est assez décent raison. Je peux dire que le processus est quelque peu sujet aux erreurs pour les débutants.


7

Ceci est un hack: mettez-le comme première ligne de votre ~/.bash_profile:

exec zsh
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.