Jak zmienić domyślną powłokę w Cygwin?

29

Próbuję zmienić domyślną powłokę z bash na zsh w cygwin.

  1. Normalne polecenie unixowe chshnie jest dostępne w cygwin
  2. Wygląda na to, że plik etc / passwd nie jest już używany w istniejących wersjach cygwina.

Jak inaczej można zmienić domyślną powłokę?

gyaani_guy
źródło

Odpowiedzi:

22

Odpowiedź zależy od tego, jak uruchomisz Cygwin.

Jeśli uruchamiasz Cygwin za pomocą Cygwin.bat , zmień ostatni wiersz /Cygwin.bat(zwykle C:\cygwin\lub C:\cygwin64\).

Jeśli uruchomisz Cygwin z mintty , dodaj powłokę jako parametr. mintty /usr/bin/zsh -

Steven
źródło
2
Dziękuję, używam Conemu. Musiał zmienić sh.exesię zsh.exew Ustawieniach Conemu> Uruchomienie> Zadania> bash Cygwin Bash>set CHERE_INVOKING=1 & %ConEmuDrive%\CygWin\bin\sh.exe --login -i
gyaani_guy
@gyaani_guy Po prostu używam ConEmu do wykonania CygWin\bin\zsh.exe. sh.exe --loginuruchomi Bash, jak to zmienić? Czy to w ogóle nie ma znaczenia? Wyobrażam sobie, że sh.exe --loginniepotrzebnie wykonuje się shprzed zsh...
deed02392,
@ deed02392 Nie jestem pewien, czy rozumiem .. ale dokładna komenda używam jest set CHERE_INVOKING=1 & %ConEmuDrive%\CygWin\bin\zsh.exe --login -iHTH
gyaani_guy
@gyaani_guy dzięki, byłem zdezorientowany, ponieważ w pierwszym komentarzu wydawało się, że sugerujesz, że zaczynasz zsh sh.exe. Teraz zdaję sobie sprawę, że po prostu nie przeczytałem twojej wiadomości poprawnie :-)
deed02392,
3
Ten miętowy przykład nie do końca działał. Miał problemy, dopóki nie uczyniłem go powłoką logowania, dodając -l: mintty.exe -i /Cygwin-Terminal.ico /usr/bin/zsh -l -
Morgan May
18

Jeśli uruchamiasz mintty.exebezpośrednio lub uruchamiasz Cygwin Terminal z menu Start lub pulpitu (który jest skrótem do mintty.exe), możesz ustawić zmienną środowiskową SHELL w systemie Windows na /usr/bin/zsh.

W systemie Windows 7:

  1. Naciśnij klawisz Windows.
  2. Zacznij pisać „środowisko”.
  3. Kiedy się pojawi, wybierz „Edytuj zmienne środowiskowe dla swojego konta”.

Reszta powinna być zrozumiała.

dc46 i 2
źródło
5
To poważnie potrzebuje więcej głosów. Nigdy nie widziałem tego nigdzie udokumentowanego i jest to oczywiście zamierzona metoda.
Kevin Mills,
1
Dla tych, którzy nie chcą polegać na wyszukiwaniu, aby znaleźć odpowiedni panel, kliknij prawym przyciskiem myszy menu Start i wybierz „System”, aby uruchomić panel sterowania Systemem. Następnie kliknij „Zaawansowane ustawienia systemu” w lewej kolumnie. W wyskakującym oknie „Właściwości systemu” kliknij „Zmienne środowiskowe ...”, aby uruchomić edytor zmiennych środowiskowych.
David C.
Działa idealnie!
bkunzi01,
16

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 / fish

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.

P Tatusiu
źródło
7

To jest hack: umieść to jako pierwszą linię swojego ~/.bash_profile:

exec zsh
Glenn Jackman
źródło