zsh mit Cygwin

35

Wie kann ich zsh als Standardshell unter Cygwin konfigurieren?

simao
quelle

Antworten:

45

Es sei denn, Sie verwenden cygwin als Mehrbenutzerumgebung (in diesem Fall chshwie in einer Standardumgebung).

Andernfalls Sie nur cygwin.bat ändern laufen zsh -l -istatt bash --login -iund es wird laufen als Login - Shell.  

Wenn Sie mehrere Shells vom Start an ausführen möchten, müssen Sie nur eine Reihe von .batDateien erstellen, um verschiedene Shells zu laden. ( sh, ksh, csh, fishUsw.)

Aktualisieren...

Ich hatte das Gefühl, ich sollte dies aktualisieren, um Informationen dazu bereitzustellen, ohne dies zu tun, chshaber es immer noch auf der Unix-Seite zu tun. Bearbeiten Sie die /etc/passwdDatei und ersetzen Sie Vorkommen von /bin/bashdurch /bin/zsh. (Dies ist effektiv, was chshtun würde, aber auf diese Weise würden Sie es für alle Benutzer auf einmal tun .)

ocodo
quelle
15
In cygwin gibt es standardmäßig kein / etc / passwd mehr und chsh wird nicht mehr unterstützt. Diese Antwort hilft nicht (10. April 2014).
Jeff Snider
Geh nach Hause @THESorcerer du bist betrunken
ocodo
2
@ JeffSnider ausführen mkpasswd -l -p "$(cygpath -H)" > /etc/passwdund bearbeiten Sie die neu erstellte /etc/passwdDatei
BrunoLM
17

Wenn ich deine Frage richtig lese, suchst du etwas anderes als das, was dir zur Verfügung steht (was, zugegeben , für sich genommen, ziemlich cool ist).

Die aktuelle Version von Cygwin hat keine / etc / passwd- Datei, und das System, an dem ich arbeite, verfügt über Windows-Kontoinformationen in einer Domänendatenbank, die sich meiner Kontrolle entziehen. Folglich wird chsh nicht mehr unterstützt.

Ich habe auch festgestellt, dass Bash weder im startxwin- Skript noch in einer BAT-Datei fest programmiert ist. Es stellte sich heraus, dass Sie überhaupt nicht mit .bat-Dateien herumspielen müssen.

Auf der Suche nach einer Möglichkeit zum Ändern der Shell fand ich einige Hinweise zu mkpasswd

Ich habe es der Mischung hinzugefügt.

Die Manpage sagte:

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.

(Ich weiß nicht, warum der Abstand so "aus" ist ...)

Ich habe dann den folgenden Befehl verwendet:

mkpasswd -c | sed -e 'sX / bashX / zshX' | tee -a / etc / passwd

Wenn Sie das nächste Mal ein Cygwin-Terminal öffnen, wird es direkt an zsh weitergeleitet

Und darum haben Sie, glaube ich, gebeten.

David L. Paktor
quelle
17

Ich füge das binVerzeichnis im Cygwin-Verzeichnis einfach zu meiner Windows-Pfad-Umgebungsvariablen hinzu und erstelle entweder eine Verknüpfung zu:

mintty.exe -i /Cygwin-Terminal.ico /bin/zsh --login

Oder ändern Sie einfach die standardmäßige Verknüpfung für das Startmenü von Cygwin.

Justin Buser
quelle
2
Ich musste /bin/zshstatt verwenden zsh.
Kraiz
1
the bin directory in the cygwin directory to my Windows Path Environment Variablefunktioniert ohne diese Änderung für mich
Ruslo
Das iwird nicht benötigt, da es eine Login-Shell ist und nicht interactive.
Timo
7

Kopiert von meiner Antwort auf Stack Overflow :


Anstatt eine passwd-Datei zu erstellen, die Cygwin gegen 1 empfiehlt , können Sie /etc/nsswitch.conf bearbeiten . Fügen Sie die folgende Zeile hinzu oder bearbeiten Sie sie:

db_shell: / usr / bin / zsh

Die Kehrseite dieser Methode ist, dass sich diese Änderung auf alle Benutzer auswirkt, wenn Sie mehrere Benutzer haben. Die gute Seite ist, dass es ganz einfach ist. Der einzige Haken ist, dass Sie Cygwin neu starten müssen.

Wenn Sie tun Verwendung mkpasswd nach dieser Änderung, es wird Ihre neue Standard - Shell für alle Benutzer verwenden , die sich anmelden dürfen.


1 In der mkpasswd-Dokumentation heißt es:

Verwenden Sie diesen Befehl nicht, um eine lokale / etc / passwd-Datei zu generieren, es sei denn, Sie benötigen wirklich eine. Weitere Informationen finden Sie im Cygwin-Benutzerhandbuch.

Ich kann keine wirklich solide Begründung im Benutzerhandbuch finden, abgesehen von einer Erwähnung, dass Sie die Dateien / etc / passwd und / etc / group neu generieren müssen, wenn sich Ihre Benutzer und Gruppen ändern, was meiner Meinung nach anständig genug ist Grund. Ich kann sagen, dass der Prozess für Neulinge etwas fehleranfällig ist.

P Papa
quelle
Dies sollte als akzeptiert markiert werden.
Arda
4

Angenommen, Sie möchten die in mintty / Cygwin Terminal verwendete Shell ändern, überprüft sie zuerst die Umgebungsvariable SHELL, dann die (jetzt nicht vorhandene) passwd-Datei und greift dann auf / bin / sh zurück standardmäßig.

Ich konnte die Umgebungsvariable SHELL in Windows auf setzen /usr/bin/zshund es funktionierte ohne weitere Änderungen. Ich habe es nur für meinen Windows-Benutzer geändert, nicht global.

Das Festlegen einer Umgebungsvariablen variiert wahrscheinlich für verschiedene Windows-Versionen. Versuchen Sie, in der Windows-Systemsteuerung nach "Umgebung" zu suchen. Für mich war es unter Windows 7 Systemsteuerung → System → Erweiterte Systemeinstellungen, das die Systemsteuerung / das Dialogfeld Systemeigenschaften öffnet, dann die Registerkarte Erweitert, dann die Schaltfläche Umgebungsvariablen, die das Dialogfeld Umgebungsvariablen öffnet und dann erstellt eine neue Benutzervariable SHELLmit dem Namen des Werts /usr/bin/zsh. Dann mach alles wieder gut und starte eine neue Münze.

wfaulk
quelle
Nun dies sollte überschwänglich upvoted werden! Der einfachste Weg, der Cygwins interne Machenschaften nicht beeinträchtigt und der leicht umkehrbar ist!
Pepoluan
1

Ich dachte nur, ich würde diese Antwort hinzufügen, falls es jedem hilft, der danach sucht. Wenn Sie chere verwenden (mit der Option "Bash-Eingabeaufforderung hier" zum Kontextmenü eines Ordners mit der rechten Maustaste hinzugefügt), können Sie zsh ("Zsh-Eingabeaufforderung hier") festlegen mit:

chere -i -t mintty -s zsh
Mike HR
quelle
0

Wenn Sie die Cygwin-Shell in IDE Intellij verwenden möchten, verwenden Sie das folgende Setup in settings / tools / terminal

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

Dadurch wird die Cygwin-Shell in intellij eingebettet, anstatt ein neues Fenster zu öffnen

serup
quelle