Jak sprawić, by zsh działał jako powłoka logowania w systemie Mac OS X (w iTerm)?

149

Gdy zsh jest ustawiony jako powłoka logowania w systemie Mac OS X, gdy jest uruchamiany przez iTerm, zsh nie bierze pod uwagę, że jest uruchamiany jako powłoka logowania, chociaż jest uruchamiany jako `` -zsh '' (`` - '' jest umieszczane jako pierwszy znak arg [0]), co ma oznaczać, że powinien zaczynać się jako powłoka logowania.

Tak więc, kiedy ustawię powłokę logowania na bash, bash rozpoznaje to pierwsze „-” w $ 0 i działa jako powłoka logowania, ale zsh nie, chociaż wydaje się, że powinien.

Czy istnieje sposób, aby sprawić, by zsh rozpoznał „-” w arg [0], albo aby iTerm uruchomił powłokę z argumentem wiersza poleceń --login?

Iwana Tarasowa
źródło
2
Wiem, że minęło trochę czasu, odkąd o to zapytano, ale rozważ przyjęcie odpowiedzi @Harold Putman. To jedyny, który dotyczy zadanego pytania.
Craig S. Cottingham

Odpowiedzi:

106

W iTerm -> Preferencje -> Zakładka Profile -> Sekcja Ogólne ustaw Polecenie na: / bin / zsh --login

/ bin / zsh --login

Harold Putman
źródło
1
Wydaje się, że iterm2 nie ma tej opcji na karcie Ogólne. Masz jakiś pomysł, jak to osiągnąć w iterm2 bez zmiany powłoki logowania?
Lloyd Dewolf
6
Jest to karta ogólna na karcie Profile.
Harold Putman
Aha! To mylące, że istnieje zarówno karta Ogólne, jak i Profile> Ogólne.
Lloyd Dewolf
2
lub w moim przypadku/usr/local/bin/zsh --login
Yar
Używam tego do zmiany mojej powłoki, zamiast edytować / etc / shells, ponieważ powinno to zapobiec problemowi z bezużytecznością mojej powłoki po aktualizacji.
sal
220
chsh -s $(which zsh)

Zostaniesz poproszony o podanie hasła, ale po zaktualizowaniu ustawień wszelkie nowe sesje iTerm / Terminal, które uruchomisz na tym komputerze, będą domyślnie ustawione na zsh.

Damien Wilson
źródło
2
Przeczytaj najpierw pytanie. Problem nie polega na ustawieniu domyślnej powłoki, problem polega na tym, że zsh nie wykrywa, że ​​jest uruchamiany jako powłoka logowania.
Ivan Tarasov
1
Ach, przepraszam. Czy próbowałeś użyć flagi -i, aby wymusić uruchomienie zsh w trybie interaktywnym?
Damien Wilson
11
Jego odpowiedź sprawia, że ​​zsh działa jako powłoka logowania w systemie Mac OS X w iTerm. Po prostu nie chodzi o robienie tego w sposób, w jaki to opisujesz. Ale rozwiązuje problem, który zadajesz (w tytule, a nie w treści). Pytanie, którym kończysz w ciele, to zupełnie inne pytanie. Jeśli to jest twoje prawdziwe pytanie (a nie jak sprawić, by zsh działał jako powłoka logowania), być może powinieneś przeformułować pytanie w tytule.
ikonoklast
45
Jeśli chshpowie Ci coś w rodzaju „niestandardowej powłoki”, oznacza to, że musisz dodać ścieżkę nowej powłoki do /etc/shells. Może się to zdarzyć, jeśli zmieniasz na przykład wersję zsh zainstalowaną przez homebrew, która ją umieszcza /usr/local/bin/zsh.
shovavnik
1
chsh -s $(which zsh)można użyć do zapewnienia prawidłowej ścieżki.
Daniel Doezema
56

Przejdź do panelu Użytkownicy i grupy w Preferencjach systemowych -> Wybierz użytkownika -> Kliknij kłódkę, aby wprowadzić zmiany (lewy dolny róg) -> kliknij prawym przyciskiem myszy bieżącego użytkownika wybierz Opcje zaawansowane ... -> Wybierz powłokę logowania: / bin / zsh i OK

Arunkumar
źródło
3
To uratowało mi dzień. Jestem na OSX Mavericks.
Qed
Działa to dla domyślnego zsh, a nie dla tego zainstalowanego przez brew.
Imam Bux
19

Polecenie zmiany powłoki podczas uruchamiania to chsh -s <path_to_shell>. Domyślne powłoki w systemie Mac OS X są instalowane w binkatalogu, więc jeśli chcesz zmienić na domyślne zsh, użyj następującego

chsh -s /bin/zsh

Jeśli używasz innej wersji programu zsh, może być konieczne dodanie tej wersji, /etc/shellsaby uniknąć niestandardowego komunikatu powłoki. Na przykład, jeśli chcesz wersję home-brew, zshmusisz dodać /usr/local/bin/zshdo wspomnianego pliku, co możesz zrobić jednym poleceniem, sudo sh -c "echo '/usr/local/bin/zsh' >> /etc/shells"a następnie uruchomić

chsh -s /usr/local/bin/zsh

Lub jeśli chcesz zrobić wszystko za pomocą jednego polecenia, po prostu skopiuj i wklej to, jeśli masz już zainstalowany zsh

sudo sh -c "echo '/usr/local/bin/zsh' >> /etc/shells" && chsh -s /usr/local/bin/zsh
hasanaina
źródło
2
Nie sądzę, by było sprawiedliwe, aby negować tę odpowiedź. Rekwizyty, ponieważ jako jedyne wspomina /etc/shellsw treści samej odpowiedzi.
heymatthew
1
@heymatthew powodem, dla którego jest odrzucany, jest to, że nie odpowiedział na zadane pytanie. Odpowiadał na zupełnie inne niezwiązane pytanie.
Tabitha
17

Czy próbowałeś edycji powłoki wpis w ustawieniach konta .

Przejdź do preferencji kont, odblokuj i kliknij prawym przyciskiem myszy swoje konto użytkownika, aby wyświetlić okno dialogowe Ustawienia zaawansowane . Twoja powłoka powinna być / bin / zsh i możesz odpowiednio edytować to wywołanie (tj. Dodać argument --login).

Brian Agnew
źródło
Niestety, to nie działa: mogę ustawić dowolną powłokę, którą lubię używać chsh (o ile mam tę powłokę wymienioną w / etc / shells), jednak nie można dodawać argumentów wiersza poleceń do powłoki w oknie dialogowym Preferencje zaawansowane (nie działa iTerm aby uruchomić powłokę).
Ivan Tarasov
Część składni uległa zmianie w systemie OS X, ale sednem jest ustawienie domyślnej powłoki na / bin / zsh, jak wskazuje Brian powyżej
engineerDave
7
Tak kocham. Użyłem tej odpowiedzi właśnie teraz i dopiero wtedy zdałem sobie sprawę, że napisałem ją prawie 4 lata temu!
Brian Agnew,
-2

Użyj loginnarzędzia, aby utworzyć powłokę logowania. Załóżmy, że użytkownik, do którego chcesz się zalogować, ma nazwę użytkownika Alice i że zsh jest zainstalowany /opt/local/bin/zsh(np. Nowsza wersja zainstalowana przez MacPorts). W iTerm 2 przejdź do Preferencje, Profile, wybierz profil, który chcesz skonfigurować i wprowadź polecenie :

login -pfq Alice /opt/local/bin/zsh

Zobacz, man loginaby uzyskać więcej informacji na temat opcji.

Robin Klose
źródło
To w 100% nie jest odpowiedź. Tak spowoduje zmianę domyślnej powłoki, którą tworzysz, ale to nie jest odpowiedź na pytanie, jak utworzyć instancję „logowania” powłoki, tj. Zasób od podstaw wszystkie zmienne.
Tabitha