Festlegen der ZSH-Standard-Shell in MacOSX [geschlossen]

97

Ich habe zsh auf meinem Mac installiert. und jetzt möchte ich es zur Standard-Shell anstelle von Bash machen. Aber ich scheine auf folgenden Fehler zu stoßen:

$ echo $SHELL
/bin/bash
$ chsh -s /usr/bin/zsh
Changing shell for harshamv.
Password for harshamv:
chsh: /usr/bin/zsh: non-standard shell
Harsha MV
quelle
1
Was gibt chsh -laus? (Wenn das nicht funktioniert, was ist der Inhalt von /etc/shells?) Sind Sie sicher, dass dies fehlschlägt und nicht nur eine Warnung? Funktioniert das Hinzufügen /usr/bin/zshdort?
Etan Reisner
1
chsh: Option erfordert ein Argument - l Verwendung: chpass [-l Speicherort] [-u Authname] [-s Shell] [Benutzer]
Harsha MV
/ bin / bash / bin / csh / bin / ksh / bin / sh / bin / tcsh / bin / zsh
Harsha MV
Was ist los mit /bin/zsh?
JXH
1
Es gibt eine offizielle Möglichkeit, die Standard-Shell jetzt in zsh zu ändern. Siehe das Apple-Dokument "Verwenden Sie zsh als Standard-Shell auf Ihrem Mac" support.apple.com/en-ca/HT208050
Anthonyeef

Antworten:

85

3 einfache Schritte:

  1. which zshDies gibt Ihnen Ihren Weg zu zsh
  2. Dann chsh -s /bin/zshoder ersetzen Sie den Pfad zu Ihrem zsh, falls abweichend
  3. Starten Sie Ihren Computer neu
Quentin Perez
quelle
yay das hat funktioniert. ist es Yosemite spezifisch?
Harsha MV
2
Nein, ich glaube nicht, es war nur zu Ihrer Information :)
Quentin Perez
8
Ein weiterer relevanter Kommentar zu derselben älteren Frage, der besagt, dass hinzugefügt werden muss, /usr/bin/zshum /etc/shellsdas Problem zu lösen.
Brice
Es funktioniert perfekt
Olkunmustafa
1
Stellen Sie es entsprechend auf / etc / shells ein! Suchen Sie mit '$ nano / etc / shells' nach einem zsh-Pfad. Meins war am 10.12.2
oikonomopo
186

Die richtige Antwort hätte Ihr Problem lösen sollen:

chsh: / usr / bin / zsh: Nicht-Standard-Shell

Der Grund , warum dies der Fall ist , liegt daran , dass chshnur Schalen annehmen , die in der Datei / etc / shells definiert sind, wie Sie das Handbuch durch das Lesen für sehen chsh:

chsh akzeptiert den vollständigen Pfadnamen aller ausführbaren Dateien auf dem System. Es wird jedoch eine Warnung ausgegeben, wenn die Shell nicht in der Datei / etc / shells aufgeführt ist.

Um dieses Problem zu lösen und zsh zur Standard-Shell zu machen, sollten Sie folgende Schritte ausführen:

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

Offensichtlich gehe ich davon aus, dass dies zshhier auf Ihrem Weg ist. Diese Lösung wird auch funktionieren , wenn Sie zum Beispiel wählen Sie die neueste Installation zshmit brew install zsh.

EDIT (danke für ThisIsFlorianK für den Kommentar) :

Abhängig von Ihrem Shell-Setup wird möglicherweise eine Meldung angezeigt /etc/shells: Permission denied. Informationen zu diesem Problem finden Sie hier. Verwenden Sie stattdessen Folgendes, um das Problem zu umgehen:

$ sudo sh -c "echo $(which zsh) >> /etc/shells"
$ chsh -s $(which zsh)
Dangom
quelle
4
Dies ist meiner Meinung nach genauer als die akzeptierte Antwort. Unter der Annahme, dass zsh unter / usr / bin / zsh installiert ist, funktionieren die anderen Antworten nicht. Sie arbeiteten für OP, da Apple zsh standardmäßig unter / bin / zsh installiert. Wenn Sie jedoch Homebrews zsh (das unter / usr / local / bin / zsh installiert ist) verwenden möchten, ist dies der richtige Weg, dies zu tun
verboze
Ich habe "bash: / etc / shells: Berechtigung verweigert". Die Antwort über die Systemeinstellungen hat bei mir funktioniert.
Ricardo Stuven
44
Wenn Sie die /etc/shells: Permission denied==> bekommen, tun Sie das stattdessen: sudo sh -c "echo $(which zsh) >> /etc/shells"
ThisIsFlorianK
1
stackoverflow.com/a/44547726/99834 - funktionierte ohne Probleme mit Systemdateien. Es fehlt nur noch eine CLI-Version, um denselben Vorgang auszuführen.
Sorin
@sorin Ist das ein unbegründeter Vandalismus oder stimmt irgendetwas mit der Antwort nicht? Systemdateien sind aus einem bestimmten Grund bearbeitbare Textdateien. chshist aus einem bestimmten Grund standardmäßig verfügbar. Obwohl es von Natur aus nichts Falsches ist, durch eine Vielzahl von Menüs zu klicken, um dasselbe zu erreichen, ist dies nicht nur nicht portierbar und fehleranfällig, sondern auch irreführend, da es sich vor Benutzern verbirgt, von denen die Änderung stammt.
Dangom
50

Ich konnte dies zum Laufen bringen, indem ich Folgendes tat:

  1. Gehen Sie zu den Systemeinstellungen
  2. Klicken Sie auf "Benutzer & Gruppen"
  3. Klicken Sie auf das Schloss, um Änderungen vorzunehmen.
  4. Klicken Sie mit der rechten Maustaste auf den aktuellen Benutzer -> Erweiterte Optionen
  5. Ändern Sie die Anmeldeshell in der Dropdown-Liste in / bin / zsh.
  6. Öffnen Sie ein neues Terminal und überprüfen Sie mit echo $SHELL
Nate Jenson
quelle
4
Wenn Sie zsh über Homebrew installieren, wird zsh in platziert /usr/local/bin/zsh. Daher müssen Sie /etc/shellsunter sudo bearbeiten und einen Eintrag hinzufügen, /usr/local/bin/zshbevor Sie die ausführbare zsh-Datei auswählen können, die Hombrew installiert hat
Baldy
7

Bei meinem MacBook musste ich Folgendes tun:

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

Dann musste ich eine .bash_profileDatei erstellen , damit mein Terminal jedes Mal, wenn ich es öffne, auf Z-Shell umschaltet:

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

Die letzte Idee wurde von hier entlehnt .

Sakovias
quelle