zsh avec Cygwin

35

Comment configurer zsh pour être le shell par défaut sous Cygwin?

simao
la source

Réponses:

45

Sauf si vous utilisez cygwin comme environnement multi-utilisateur (dans ce cas, utilisez-le chshcomme vous le feriez dans un environnement standard.)

Sinon, il suffit de changer le fichier cygwin.bat pour qu'il s'exécute zsh -l -iau lieu de bash --login -iet 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 .batfichiers pour charger différents shells. ( sh, ksh, csh, fishEtc.)

Mise à jour...

J'ai senti que je devrais mettre à jour ceci pour fournir des informations sur le faire sans pour autant le chshfaire sous Unix. Editez le /etc/passwdfichier et remplacez les occurrences de /bin/bashpar /bin/zsh. (C'est effectivement ce que chshferaient les choses, mais de cette façon, vous le feriez pour tous les utilisateurs en une fois.)

ocodo
la source
15
Il n'y a plus de / etc / passwd dans cygwin par défaut et chsh n'est plus supporté. Cette réponse n'aide pas (10 avril 2014).
Jeff Snider
Rentre chez toi @THESorcerer vous êtes ivre
ocodo
2
@JeffSnider lance mkpasswd -l -p "$(cygpath -H)" > /etc/passwdet édite le nouveau /etc/passwdfichier créé
BrunoLM
17

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

David L. Paktor
la source
17

Je viens d'ajouter le binré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.

Justin Buser
la source
2
Je devais utiliser /bin/zshau lieu de zsh.
kraiz
1
the bin directory in the cygwin directory to my Windows Path Environment Variablefonctionne sans ce changement pour moi
ruslo
le in'est pas nécessaire car ce sera un shell de connexion et non interactive.
Timo
7

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.

P papa
la source
Cela devrait être marqué comme accepté.
Arda
4

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/zshet 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 SHELLavec la valeur /usr/bin/zsh. Puis OK, quittez tout cela et démarrez une nouvelle menthe.

wfaulk
la source
Maintenant, cela devrait être voté à profusion! Le moyen le plus simple qui ne gâche pas les machinations internes de Cygwin et qui soit facilement réversible!
pepoluan
1

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
Mike HR
la source
0

Si vous souhaitez utiliser le shell Cygwin dans l’IDE ​​Intellij, utilisez la configuration suivante dans les paramètres / tools / terminal.

c:\cygwin\bin\zsh.exe -l -i

Cela va intégrer le shell cygwin dans intellij au lieu de créer une nouvelle fenêtre

serup
la source