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?


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


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.


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


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

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


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.


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