Odpowiedzi:
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
plik
Jeś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:
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.
(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ś.
Po prostu dodaję bin
katalog z katalogu cygwin do mojej zmiennej Windows Path Environment Variable, a następnie tworzę skrót do:
mintty.exe -i /Cygwin-Terminal.ico /bin/zsh --login
lub po prostu zmień domyślny skrót menu startowego cygwin na ten sam.
/bin/zsh
zamiast zsh
.
the bin directory in the cygwin directory to my Windows Path Environment Variable
działa dla mnie bez tej zmiany
i
nie jest potrzebne, ponieważ będzie powłoką zgłoszeniową i nie interactive
.
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:
db_shell: / usr / bin / zsh
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:
Nie używaj tego polecenia do generowania lokalnego pliku / etc / passwd, chyba że naprawdę go potrzebujesz. Aby uzyskać więcej informacji, zobacz Podręcznik użytkownika Cygwin.
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.
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ę.
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ą:
chere -i -t mintty -s zsh