Ustawianie domyślnej powłoki ZSH w systemie MacOSX [zamknięte]


99

Zainstalowałem zsh na moim Macu. a teraz chcę, aby była to domyślna powłoka zamiast Bash. Ale wydaje mi się, że mam następujący błąd:

$ echo $SHELL
/bin/bash
$ chsh -s /usr/bin/zsh
Changing shell for harshamv.
Password for harshamv:
chsh: /usr/bin/zsh: non-standard shell

1
Co się chsh -lwyświetla? (Jeśli to nie zadziała, jaka jest zawartość /etc/shells?) Czy na pewno to zawodzi, a nie tylko ostrzeżenie? Czy dodanie /usr/bin/zshtam powoduje, że to działa?
Etan Reisner

1
chsh: opcja wymaga argumentu - l użycie: chpass [-l lokalizacja] [-u nazwa_autora] [-s powłoka] [użytkownik]
Harsha MV

/ bin / bash / bin / csh / bin / ksh / bin / sh / bin / tcsh / bin / zsh
Harsha MV

Co jest nie tak /bin/zsh?
jxh

1
Istnieje teraz oficjalny sposób zmiany domyślnej powłoki na zsh. Zobacz dokument firmy Apple „Używanie zsh jako domyślnej powłoki na komputerze Mac” support.apple.com/en-ca/HT208050
Anthonyeef

Odpowiedzi:


86

3 proste kroki:

  1. which zshto daje ci drogę do zsh
  2. Następnie chsh -s /bin/zshlub zastąp ścieżkę do twojego zsh, jeśli jest inna
  3. Uruchom ponownie komputer

tak to zadziałało. czy jest to specyficzne dla Yosemite?
Harsha MV

2
Nie, nie sądzę, to tylko dla twojej informacji :)
Quentin Perez

8
Kolejny istotny komentarz do tego samego starszego pytania, który mówi, aby dodać, /usr/bin/zshaby /etc/shellsrozwiązać problem.
Brice

Działa idealnie
Olkunmustafa

1
Ustaw go odpowiednio na / etc / shells! Poszukaj ścieżki zsh z „$ nano / etc / shells”. Mój był w / bin / zsh zamiast / usr / bin / zsh w dniu 10.12.2
oikonomopo

188

Prawidłowa odpowiedź powinna była rozwiązać Twój problem:

chsh: / usr / bin / zsh: powłoka niestandardowa

Dzieje się tak, ponieważ chshakceptuje tylko powłoki zdefiniowane w pliku / etc / shells, co można zobaczyć czytając instrukcję dla chsh:

chsh zaakceptuje pełną ścieżkę do dowolnego pliku wykonywalnego w systemie. Jednak wyświetli ostrzeżenie, jeśli powłoka nie zostanie wymieniona w pliku / etc / shells.

Aby rozwiązać ten problem i ustawić zsh jako domyślną powłokę, powinieneś:

$ sudo echo "$(which zsh)" >> /etc/shells
$ chsh -s $(which zsh)

Oczywiście zakładam, że zshjest to na twojej drodze. To rozwiązanie sprawdzi się również, jeśli na przykład zdecydujesz się zainstalować najnowszą wersję zshz brew install zsh.

EDYCJA (dzięki za ThisIsFlorianK za komentarz) :

W zależności od konfiguracji powłoki może pojawić się komunikat /etc/shells: Permission denied. Możesz znaleźć informacje na ten temat tutaj. Aby to obejść, użyj zamiast tego:

$ sudo sh -c "echo $(which zsh) >> /etc/shells"
$ chsh -s $(which zsh)

4
jest to dokładniejsze, moim zdaniem, odpowiedź. zakładając, że zsh jest zainstalowany w / usr / bin / zsh, inne odpowiedzi nie działają. Pracowali dla OP, ponieważ domyślnie Apple instaluje zsh w / bin / zsh. Jeśli jednak chcesz użyć zsh homebrew (który jest zainstalowany w / usr / local / bin / zsh), byłby to właściwy sposób na zrobienie tego
verboze

Otrzymałem „bash: / etc / shells: Odmowa uprawnień”. Odpowiedź za pośrednictwem Preferencji systemowych zadziałała dla mnie.
Ricardo Stuven

44
Jeśli otrzymasz /etc/shells: Permission denied==> Zrób to zamiast tego: sudo sh -c "echo $(which zsh) >> /etc/shells"
ThisIsFlorianK

1
stackoverflow.com/a/44547726/99834 - działał bez bałaganu z plikami systemowymi. Brakuje tylko wersji CLI do wykonania tej samej operacji.
sorin

@sorin Czy to nieuzasadniony wandalizm w złej opinii, czy w odpowiedzi jest coś nie tak? Pliki systemowe nie bez powodu są edytowalnymi plikami tekstowymi. chshjest domyślnie dostępna z jakiegoś powodu. Chociaż nie ma nic złego w klikaniu wielu menu w celu osiągnięcia tego samego, jest to nie tylko nie do przenoszenia i podatne na błędy, ale także wprowadza w błąd, ponieważ ukrywa się przed użytkownikami, skąd pochodzi zmiana.
dangom

52

Udało mi się to osiągnąć, wykonując następujące czynności:

  1. Przejdź do Preferencji systemowych
  2. Kliknij „Użytkownicy i grupy”
  3. Kliknij kłódkę, aby wprowadzić zmiany.
  4. Kliknij prawym przyciskiem myszy bieżącego użytkownika -> Opcje zaawansowane
  5. Zmień powłokę logowania na / bin / zsh w menu rozwijanym.
  6. Otwórz nowy terminal i zweryfikuj za pomocą echo $SHELL

4
jeśli zainstalujesz zsh przez homebrew, umieści on zsh w /usr/local/bin/zsh. Dlatego będziesz musiał edytować /etc/shellsw sudo i dodać wpis, /usr/local/bin/zshzanim będziesz mógł wybrać plik wykonywalny zsh, który hombrew zainstalował
Baldy

7

Na moim MacBooku w pracy musiałem zrobić to:

sudo chsh -s /usr/local/bin/zsh my_user_name

Następnie musiałem utworzyć .bash_profileplik, aby mój terminal przełączał się na powłokę z za każdym razem, gdy go otwieram:

touch ~/.bash_profile
echo 'export SHELL=$(which zsh)' >> ~/.bash_profile
echo 'exec $(which zsh) -l' >> ~/.bash_profile

Ostatni pomysł został zapożyczony stąd .

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.