Ich bin gerade auf dieses Problem gestoßen. Um zsh zum Laufen zu bringen, habe ich Folgendes getan:
- Installiertes MSYS2
- Aus dem Verzeichnis, in dem ich MSYS2 installiert habe, habe ich ausgeführt
mingw32_shell.bat
- Aktualisierte alle installierten Pakete durch Ausführen
pacman -Syu
- Installierte zsh und curl durch Ausführen
pacman -Sy zsh curl
- Die MinGW-Shell wurde durch Ausführen geschlossen
exit
- ich wurde nicht zsh
sofort nach der Installation ausgeführt.
- Msys2_shell.bat, mingw32_shell.bat und mingw64_shell.bat wurden bearbeitet und jede Instanz von:
start %WD%mintty -i /msys2.ico /usr/bin/bash --login %*
in:
geändert
start %WD%mintty -i /msys2.ico /usr/bin/zsh --login %*
(in Zeile 39 vom 23.09.2015)
- Ran
mingw32_shell.bat
- Im zsh-Konfigurationsmenü wähle ich aus,
0
um die .zshrc-Datei zu erstellen.
Als die Konfiguration abgeschlossen war, sah ich:
zsh-newuser-install:1119: command not found: rm
Was nicht richtig aussah ... da rm
es auf einem gesunden * nix-System niemals net zu finden sein sollte (ich vermute, es ist ein Fehler mit dem zsh-Paket von MSYS2), aber danach lief alles gut.
Als ich dies zum ersten Mal versuchte, als ich eine Batchdatei öffnete, um eine neue Sitzung zu erstellen, erhielt ich eine Fehlermeldung, dass der Speicherplatz von zsh bereits belegt ist. Um dies zu beheben, habe ich alle geöffneten MinTTY-Fenster geschlossen und die autorebase.bat
Datei im MSYS2-Installationsverzeichnis ausgeführt. Danach hat alles geklappt.
Dann habe ich oh-my-zsh installiert. Verwenden von:
sh -c "$(curl -fsSL https://raw.github.com/robbyrussell/oh-my-zsh/master/tools/install.sh)"
rm
ist eigentlich wirklich unschuldig. Das Ende des/usr/share/zsh/functions/Newuser/zsh-newuser-install
Skripts enthält einrm -f $tmpfile*
, um nach sich selbst aufzuräumen. Es ist genau das gleiche in der aktuellen Fedora-Installation/usr/share/zsh/5.7.1/functions/zsh-newuser-install
.Ich bin darauf mit dem neueren msys2-Launcher gestoßen, der Starter
.exe
anstelle von Batch-Dateien bereitstellt .Dazu war es nur eine Frage der den sich ändernden
.ini
Dateien neben den Trägerraketen innerhalb des Msys2 Stammverzeichnis (für eine 64-Bit - Installation kann es enthaltenmsys2.ini
,mingw32.ini
undmingw64.ini
). Fügen Sie für jede dieser INI-Dateien eine Zeile hinzu, um die Shell festzulegen:quelle
zsh
als Shell festzulegen. Zum Einrichten von oh-my-zsh könnte man diese Methode in Betracht ziehen - derskel
Teil gilt meines Erachtens nicht wirklich für msys2.Bearbeiten
/etc/nsswitch.conf
und ändern Sie die Einstellung unten:quelle
msys2_shell.cmd
Bat-Datei festlegen , aber das Ändern in der.cmd
Datei wirkt sich nicht auf die Shell aus, wenn Sie von einem der.exe
sWenn das Ändern der Standard-Shell nicht unterstützt wird, können Sie die gewünschte Shell verwenden, indem Sie sie sofort starten, wenn die Standard-Shell gestartet wird.
Schreiben Sie
zsh
zum Beispiel einfach an~/.bashrc
und wenn bash startet, wird zsh für Sie ausgeführt. Wie auch immer, ein streunender Bash-Prozess läuft noch und Sie müssen die Shell beim Abmelden zweimal beenden. Um es besser zu machen, schreiben Sieexec zsh
statt aufzsh
diese Weise wird der Bash-Prozess vollständig durch einen zsh-Prozess ersetzt.Diese Methode ist nicht perfekt, sollte aber in den meisten Fällen gut funktionieren. Im Vergleich zum Ändern fest codierter Werte kann dies zu weniger Kompatibilitätsproblemen führen.
Es wird zuerst in dieser Antwort auf StackOverflow erwähnt .
quelle
Mein installiert hat nicht haben , die genannten Dateien in der akzeptierten Antwort (
msys2_shell.bat
,mingw32_shell.bat
, undmingw64_shell.bat
).Stattdessen enthält meine Win10-Systeminstallation von MSYS2 (unter Verwendung der Installationsdatei
msys2-x86_64-20161025.exe
) eine einzelne Dateimsys2_shell.cmd
mit der Zeile:Ich wechselte
bash
zuzsh
. Scheint soweit zu funktionieren.quelle
.exe
Dateien aus starten müssen, wird die Shell dadurch nicht festgelegt. Schauen Sie sich dazu die Antwort von Alan Pearce anIch habe eine Lösung, aber es erfordert, dass Sie ConEmu anstelle des anderen Terminals verwenden, das Sie derzeit verwenden. Probieren Sie es aus, meiner Meinung nach ist es die beste Terminal-App unter Windows.
Zunächst müssen Sie zsh mit pacman installieren. Ich denke, du bist schon so weit gekommen. Dann müssen Sie ConEmu installieren (was Sie mit Chocolatey tun können oder indem Sie einfach das Installationsprogramm von der conemu-Site herunterladen). In den ConEmu-Einstellungen sollten Sie unter "Aufgaben" eine neue Aufgabe hinzufügen. Es hat wahrscheinlich schon einen Anruf
Bash::Msys2-64
oder so etwas, also machst du vielleicht einen AnrufZsh::Msys2-64
. Der Name ist in jedem Fall beliebig. Im Feld 'Befehle' für diese neue Aufgabe können Sie den Befehl grundsätzlich kopierenBash::Msys2-64
undzsh.exe
gegebenenfalls ersetzen . Meins ist wie:In den Startoptionen von ConEmu können Sie dies als Startaufgabe festlegen, sodass Sie beim Öffnen von ConEmu jedes Mal direkt in Ihr Zsh gelangen. Natürlich können Sie auch eine Tastenkombination zum Öffnen oder eine andere Aufgabe in einem neuen Tab oder nach Belieben festlegen. ConEmu bietet eine Vielzahl von Optionen, sodass Sie es sicher nach Belieben einrichten können.
quelle
Die MSYS2-Entwickler ändern offensichtlich ständig ihr Setup, da bei den neuesten Installationen der
msys2_shell
in Windows installierte Befehl zum Starten der MSYS2-Umgebung (en) ein-shell
Argument akzeptiert .Um eine andere Shell zu verwenden, können Sie die Eigenschaften eines oder mehrerer Starter für MSYS2 / MinGW 32 / MinGW 64 bearbeiten und das Ziel aktualisieren, um es hinzuzufügen
-shell zsh
oder was auch immer. (Wenn die Shell$PATH
für die MSYS-Umgebung geeignet ist, die ausreicht, benötigen Sie nicht den vollständigen Pfad.)Zum Beispiel für den Launcher "MSYS2 MinGW 64-Bit" in "MSYS2 64bit" in meinem Win7-Startmenü:
Dies scheint die einfachste und kompatibelste Möglichkeit zu sein, dauerhaft zu wechseln, da Ihre Änderungen nicht durch Upgrades oder was auch immer gelöscht werden.
Seltsamerweise berücksichtigen die Starter keine Umgebungsvariablen, Registrierungseinträge usw. Sofern
-shell
die Befehlszeile nicht zum Überschreiben übergeben wird, wird dieLOGINSHELL=bash
Standardeinstellung verwendet, die sie ursprünglich erzwingt.quelle
BEARBEITEN: Das Folgende gilt für frühere Versionen von MSYS2. Ab dem 21.01.2020 ist es nicht mehr erforderlich. Die Antwort von FeRD scheint am besten zu funktionieren.
Ich wollte Fisch anstelle von Bash verwenden. Leider haben die meisten Methoden hier nicht funktioniert, möglicherweise weil die Fischsyntax so unterschiedlich ist.
Was am besten funktionierte, war die Idee von wzhd,
exec fish
als erstes zu laufen , wenn die Bash beginnt. Es gab jedoch immer noch ein Problem: Wenn ich bash verwenden wollte, musste ich bearbeiten.bashrc
, um diese Zeile zu entfernen, da selbst wenn ich sie von fish aus laufen lasse, nur eine andere Fischinstanz gestartet wird.Am besten stellen Sie sicher, dass es ausgeführt wird,
exec fish
wenn msys2 beginnt, aber nicht jedes Mal , wenn bash beginnt.Ich habe die Datei
msys2_shell.cmd
im Installationsordner von msys2 gefunden. Ich habe diese Zeilen gefunden:Es scheint, dass sie Parameter definieren, die an bash übergeben werden sollen, sobald es beginnt, aber nur, wenn dieses Skript ausgeführt wird (im Gegensatz zu
.bashrc
). Also habe ich diese Zeile gleich danach hinzugefügt:Bisher scheint alles in Ordnung zu sein. Das Starten von msys2 ersetzt bash durch fish, sobald der Ladevorgang abgeschlossen ist. Wenn ich jedoch eine bash-Befehlszeile benötige, kann ich sie trotzdem einfach starten
bash
.quelle