web-dev-qa-db-fra.com

zsh avec Cygwin

Comment configurer zsh pour qu'il soit le shell par défaut sous Cygwin?

34
simao

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.)

Mettre à jour...

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.)

45
ocodo

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.

17
Justin Buser

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é.

17
David L. Paktor

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.

5
P Daddy

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.

4
wfaulk

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
1
Mike H-R

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.

0
serup