zsh z Cygwin


Odpowiedzi:


45

Chyba że używasz cygwin jako środowiska dla wielu użytkowników (w takim przypadku używaj go chshtak, jak w standardowym środowisku).

W przeciwnym razie wystarczy zmienić cygwin.bat, aby działał zsh -l -izamiast bash --login -ii będzie działał jako powłoka logowania.  

Oczywiście, jeśli chcesz uruchomić wiele powłok od uruchomienia, po prostu utwórz zestaw .batplików, aby załadować różne powłoki. ( sh, ksh, csh, fishEtc.)

Aktualizacja...

Czułem, że powinienem to zaktualizować, aby dostarczyć informacji na temat robienia tego bez, chshale wciąż robiąc to na Uniksie. Edytować /etc/passwdplik i zastąpić wystąpienia /bin/bashz /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).


15
Domyślnie nie ma już / etc / passwd w cygwin, a chsh nie jest już obsługiwany. Ta odpowiedź nie pomaga (10 kwietnia 2014 r.).
Jeff Snider

Idź do domu @THESorcerer jesteś pijany
ocodo

2
@JeffSnider uruchom mkpasswd -l -p "$(cygpath -H)" > /etc/passwdi edytuj nowo utworzony /etc/passwdplik
BrunoLM

17

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ś.


17

Po prostu dodaję binkatalog 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.


2
Musiałem użyć /bin/zshzamiast zsh.
kraiz

1
the bin directory in the cygwin directory to my Windows Path Environment Variabledziała dla mnie bez tej zmiany
ruslo

inie jest potrzebne, ponieważ będzie powłoką zgłoszeniową i nie interactive.
Timo

7

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.


Należy to zaznaczyć jako zaakceptowane.
Arda,

4

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/zshi 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 SHELLo wartości /usr/bin/zsh. Następnie OK, wycofaj się z tego wszystkiego i zacznij nową miętę.


Teraz to należy upvoted obficie! Najprostszy sposób, który nie psuje się wewnętrznym machinacjom Cygwina i łatwo odwracalny!
pepoluan

1

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

0

Jeśli chcesz użyć powłoki Cygwin w IDE Intellij, skorzystaj z następującej konfiguracji w ustawieniach / narzędziach / terminalu

c:\cygwin\bin\zsh.exe -l -i

Spowoduje to osadzenie powłoki cygwin w Intellij zamiast tworzenia nowego okna

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.