Jak mogę skonfigurować Zsh, aby był domyślną powłoką w Cygwin?
35
Chyba że używasz cygwin jako środowiska dla wielu użytkowników (w takim przypadku używaj go chsh
tak, jak w standardowym środowisku).
W przeciwnym razie wystarczy zmienić cygwin.bat, aby działał zsh -l -i
zamiast bash --login -i
i będzie działał jako powłoka logowania.
Oczywiście, jeśli chcesz uruchomić wiele powłok od uruchomienia, po prostu utwórz zestaw .bat
plików, aby załadować różne powłoki. ( sh
, ksh
, csh
, fish
Etc.)
Czułem, że powinienem to zaktualizować, aby dostarczyć informacji na temat robienia tego bez, chsh
ale wciąż robiąc to na Uniksie. Edytować /etc/passwd
plik i zastąpić wystąpienia /bin/bash
z /bin/zsh
. (Jest to faktycznie to chsh
, co by zrobił, ale w ten sposób zrobiłbyś to dla wszystkich użytkowników za jednym razem).
mkpasswd -l -p "$(cygpath -H)" > /etc/passwd
i edytuj nowo utworzony/etc/passwd
plikJeśli dobrze przeczytam twoje pytanie, szukasz czegoś innego niż zapasy chere (co, oczywiście, jest całkiem fajne).
Obecna wersja Cygwin nie ma pliku / etc / passwd , a system, nad którym pracuję, ma informacje o koncie Windows w bazie danych domeny poza moją kontrolą. W związku z tym polecenie chsh nie jest już obsługiwane.
Odkryłem również, że bash nie jest zakodowany na stałe w skrypcie startxwin , ani nie jest zakodowany na stałe w żadnym pliku .bat. Okazuje się, że wcale nie musisz bawić się plikami .bat.
Szukając sposobu zmiany powłoki, znalazłem porady dotyczące mkpasswd
Dodałem to do miksu.
Strona podręcznika powiedziała:
(Nie wiem, dlaczego odstępy są tak „wyłączone” ...)
Następnie użyłem następującego polecenia:
mkpasswd -c | sed -e 'sX / bashX / zshX' | tee -a / etc / passwd
Następnym razem, gdy otworzysz terminal Cygwin, przejdzie on prosto do zsh
I myślę, że o to prosiłeś.
źródło
Po prostu dodaję
bin
katalog z katalogu cygwin do mojej zmiennej Windows Path Environment Variable, a następnie tworzę skrót do:lub po prostu zmień domyślny skrót menu startowego cygwin na ten sam.
źródło
/bin/zsh
zamiastzsh
.the bin directory in the cygwin directory to my Windows Path Environment Variable
działa dla mnie bez tej zmianyi
nie jest potrzebne, ponieważ będzie powłoką zgłoszeniową i nieinteractive
.Skopiowano z mojej odpowiedzi na temat przepełnienia stosu :
Zamiast tworzyć plik passwd, który Cygwin zaleca przeciwko 1 , możesz edytować /etc/nsswitch.conf . Dodaj lub edytuj następujący wiersz:
Wadą / górą tej metody jest to, że jeśli masz wielu użytkowników, zmiana dotyczy wszystkich z nich. Wadą / zaletą jest to, że jest to bardzo proste. Jedynym haczykiem jest to, że musisz ponownie uruchomić Cygwin.
Jeśli zrobić użytku mkpasswd po tej zmianie, będzie korzystał z nowego domyślną powłokę dla wszystkich użytkowników, które są dopuszczone do zalogowania.
1 Dokumentacja mkpasswd mówi:
Naprawdę nie mogę znaleźć żadnego solidnego uzasadnienia w podręczniku użytkownika , poza wzmianką, że będziesz musiał ponownie wygenerować pliki / etc / passwd i / etc / group, jeśli Twoi użytkownicy i grupy się zmienią, co, jak sądzę, jest wystarczająco przyzwoite powód. Mogę powiedzieć, że proces ten jest nieco podatny na błędy dla początkujących.
źródło
Zakładając, że jesteś zainteresowany zmianą powłoki używanej w terminalu mintty / Cygwin, najpierw sprawdza zmienną środowiskową SHELL, a następnie (nieistniejący) plik passwd, a następnie wraca do / bin / sh, co wydaje się robić domyślnie.
Byłem w stanie ustawić zmienną środowiskową SHELL w systemie Windows na
/usr/bin/zsh
i działała bez żadnych innych zmian. Właśnie zmieniłem to dla mojego użytkownika systemu Windows, nie globalnie.Ustawienie zmiennej środowiskowej prawdopodobnie różni się w zależności od wersji systemu Windows. Spróbuj wyszukać „środowisko” w Panelu sterowania systemu Windows. Dla mnie w systemie Windows 7 był to Panel sterowania → System → Zaawansowane ustawienia systemu, który wyświetla panel sterowania / okno dialogowe Właściwości systemu, następnie karta Zaawansowane, a następnie przycisk Zmienne środowiskowe, który wyświetla okno dialogowe Zmienne środowiskowe, a następnie utwórz nowa zmienna użytkownika o nazwie
SHELL
o wartości/usr/bin/zsh
. Następnie OK, wycofaj się z tego wszystkiego i zacznij nową miętę.źródło
Pomyślałem, że dodam tę odpowiedź na wypadek, gdyby pomógł każdemu, kto jej szuka. Jeśli używasz chere (który dodaje opcję „Bash monitu tutaj” do menu kontekstowego dowolnego kliknięcia prawym przyciskiem myszy), możesz ustawić go na zsh („Zsh Monituj tutaj”) za pomocą:
źródło
Jeśli chcesz użyć powłoki Cygwin w IDE Intellij, skorzystaj z następującej konfiguracji w ustawieniach / narzędziach / terminalu
Spowoduje to osadzenie powłoki cygwin w Intellij zamiast tworzenia nowego okna
źródło