Właśnie natrafiłem na ten problem. Aby uruchomić Zsh, zrobiłem to:
- Zainstalowano MSYS2
- Z katalogu, w którym zainstalowałem MSYS2, uruchomiłem
mingw32_shell.bat
- Uaktualniono wszystkie zainstalowane pakiety, uruchamiając
pacman -Syu
- Zainstalowano Zsh i curl, uruchamiając
pacman -Sy zsh curl
- Zamknąłem powłokę MinGW, uruchamiając
exit
- nie uruchomiłem zsh
natychmiast po instalacji.
- Edytowałem msys2_shell.bat, mingw32_shell.bat i mingw64_shell.bat i zmieniłem każde wystąpienie:
start %WD%mintty -i /msys2.ico /usr/bin/bash --login %*
na:
start %WD%mintty -i /msys2.ico /usr/bin/zsh --login %*
(w linii 39 na dzień 23.09.2015)
- Biegł
mingw32_shell.bat
- W menu konfiguracji zsh wybieram
0
utworzenie pliku .zshrc.
Po zakończeniu konfiguracji zobaczyłem:
zsh-newuser-install:1119: command not found: rm
Co nie wyglądało dobrze ... ponieważ rm
nigdy nie powinno się znaleźć w zdrowym systemie * nix (zgaduję, że to błąd w pakiecie zsh MSYS2), ale potem wszystko poszło dobrze.
Kiedy po raz pierwszy spróbowałem tego, kiedy uruchomiłem, otworzyłem plik wsadowy, aby utworzyć nową sesję, otrzymałem błąd dotyczący zajętej przestrzeni pamięci zsh. Aby to naprawić, zamknąłem wszystkie otwarte okna MinTTY i uruchomiłem autorebase.bat
plik w katalogu instalacyjnym MSYS2. Potem wszystko działało.
Potem zainstalowałem oh-my-zsh. Za pomocą:
sh -c "$(curl -fsSL https://raw.github.com/robbyrussell/oh-my-zsh/master/tools/install.sh)"
rm
jest naprawdę naprawdę niewinne. Koniec/usr/share/zsh/functions/Newuser/zsh-newuser-install
skryptu zawierarm -f $tmpfile*
po sobie opcję czyszczenia. Jest dokładnie tak samo w bieżącej instalacji mojej Fedory/usr/share/zsh/5.7.1/functions/zsh-newuser-install
.Natknąłem się na to przy użyciu nowszego programu uruchamiającego msys2, który zapewnia programy uruchamiające,
.exe
a nie pliki wsadowe.Do tego, to było po prostu kwestia zmiany
.ini
plików obok wyrzutni wewnątrz katalogu Msys2 (dla instalacji 64-bitowej, może ona zawieraćmsys2.ini
,mingw32.ini
imingw64.ini
). Dla każdego z tych plików ini dodaj wiersz, aby ustawić powłokę:źródło
zsh
powłoki. Przy ustawianiu oh-my-zsh można rozważyć tę metodę - taskel
część tak naprawdę nie dotyczy msys2, o ile widzę.Edytuj
/etc/nsswitch.conf
i zmień poniższe ustawienie:źródło
msys2_shell.cmd
pliku bat, ale zmieniając go w.cmd
pliku nie ma wpływu na powłokę jeśli trzeba zacząć od jednego z.exe
SGdy zmiana domyślnej powłoki nie jest obsługiwana, jednym ze sposobów użycia powłoki, którą lubisz, jest uruchomienie jej natychmiast po uruchomieniu domyślnej powłoki.
Na przykład, po prostu napisz
zsh
do~/.bashrc
, a kiedy bash się rozpocznie, uruchomi dla ciebie zsh. Jak zawsze działa proces bezpańskiego basha, a wylogowanie wymaga dwukrotnego opuszczenia powłoki. Aby było lepiej, piszexec zsh
zamiast wzsh
ten sposób proces bash jest całkowicie zastąpiony procesem zsh.Ta metoda nie jest idealna, ale w większości przypadków powinna działać dobrze. W porównaniu do zmiany wartości zakodowanych na stałe może powodować mniej problemów ze zgodnością.
Po raz pierwszy wspomniano w tej odpowiedzi na StackOverflow .
źródło
Moja instalacja nie nie mają wspomnianych plików odpowiedź dozwolone (
msys2_shell.bat
,mingw32_shell.bat
, imingw64_shell.bat
).Zamiast tego moja instalacja MSYS2 w systemie Win10 (przy użyciu pliku instalatora
msys2-x86_64-20161025.exe
) ma jeden plikmsys2_shell.cmd
z linią:Zmieniłem się
bash
nazsh
. Wydaje się, że do tej pory działał.źródło
.exe
plików, to nie ustawi powłoki, bo to spojrzenie na odpowiedź Alana Pearce'aMam rozwiązanie, ale wymaga użycia ConEmu zamiast jakiegokolwiek innego terminala, którego obecnie używasz. Spróbuj jednak, moim zdaniem, jest to najlepsza aplikacja terminalowa na Windows.
Przede wszystkim musisz zainstalować Zsh za pomocą Pacmana. Chyba już zaszedłeś tak daleko. Następnie musisz zainstalować ConEmu (co możesz zrobić z Chocolatey lub po prostu pobierając instalator ze strony conemu). W ustawieniach ConEmu, w sekcji „Zadania”, należy dodać nowe zadanie. Prawdopodobnie ma już jeden zwany
Bash::Msys2-64
lub coś w tym rodzaju, więc może zrobisz takiZsh::Msys2-64
. W każdym razie nazwa jest dowolna. W polu „Polecenia” dla tego nowego zadania możesz w zasadzie skopiować polecenie zBash::Msys2-64
i wzsh.exe
razie potrzeby zastąpić je . Mój jest jak:Następnie, w opcjach „Uruchamiania” ConEmu, możesz ustawić to jako zadanie uruchamiania, aby otwarcie ConEmu za każdym razem doprowadzało cię bezpośrednio do Zsh. Oczywiście możesz również ustawić kombinację klawiszy do otwierania go lub dowolnego innego zadania w nowej karcie lub cokolwiek chcesz. ConEmu ma wiele opcji, więc jestem pewien, że będziesz w stanie skonfigurować go tak, jak chcesz.
źródło
Deweloperzy MSYS2 oczywiście zmieniają konfigurację, ponieważ w najnowszych instalacjach
msys2_shell
polecenie zainstalowane w systemie Windows w celu uruchomienia środowiska MSYS2 akceptuje-shell
argument.Tak więc, aby użyć innej powłoki, możesz edytować właściwości jednego lub więcej programów uruchamiających MSYS2 / MinGW 32 / MinGW 64 i zaktualizować Cel, aby dodać
-shell zsh
lub cokolwiek. (Jeśli powłoka jest$PATH
wystarczająca dla środowiska MSYS, nie potrzebujesz pełnej ścieżki).Na przykład dla programu uruchamiającego „MSYS2 MinGW 64-bit” w „MSYS2 64bit” w moim menu Start Win7:
To wydaje się być najłatwiejszym i najbardziej zgodnym sposobem na stałe przełączenie, ponieważ zmiany nie zostaną usunięte przez aktualizacje lub cokolwiek innego.
Dziwne, że programy uruchamiające nie respektują żadnych zmiennych środowiskowych, wpisów rejestru itp. Jeśli nie
-shell
zostanie przekazane w wierszu poleceń, aby je zastąpić,LOGINSHELL=bash
zostaną użyte domyślne ustawienia, które początkowo wymusza.źródło
EDYCJA: Poniższe dotyczy starszych wersji MSYS2. Od 21.01.2020 nie jest już wymagane. Odpowiedź FeRD wydaje się działać najlepiej.
Chciałem użyć ryby zamiast bash. Niestety większość metod tutaj nie działała, być może dlatego, że składnia ryb jest tak inna.
To, co działało najlepiej, to pomysł wzhd o uruchomieniu
exec fish
jako pierwszej rzeczy, gdy zaczyna się bash. Wciąż jednak był problem: gdybym chciał użyć bash, musiałem edytować,.bashrc
aby usunąć ten wiersz, ponieważ nawet jeśli uruchomię go z ryb, po prostu uruchomiłbym kolejną instancję ryby.Najlepiej jest upewnić się, że
exec fish
działa, gdy zaczyna się msys2, ale nie za każdym razem, gdy zaczyna się bash.Znalazłem sposób poprzez plik
msys2_shell.cmd
w folderze instalacyjnym msys2. Znalazłem następujące linie:Wygląda na to, że definiują parametry, które mają zostać przekazane do bashu, gdy tylko się rozpocznie, ale tylko wtedy, gdy ten skrypt zostanie uruchomiony (w przeciwieństwie do
.bashrc
). Więc dodałem ten wiersz zaraz po:Jak dotąd wszystko wydaje się w porządku. Uruchamianie msys2 zastępuje bash rybą, gdy tylko poprzednie zakończy ładowanie, ale jeśli potrzebuję linii poleceń bash, nadal mogę po prostu zacząć
bash
.źródło