Schauen Sie hier für die gute Erklärung und Lösung gepostet von @ mklement0 [in Bezug auf ein bashUpgrade Problem.
Ich hatte ein ähnliches Problem, als ich auf meinem System (OS X 10.10.1) das Gegenteil tat: bashdie Standard-Login-Shell nach der Installation erneut zu erstellen oh-my-zsh, die zshden Standard machte, und dann bashmit Homebrew von 3.2.53 auf 4.3.30 zu aktualisieren ( Warum liefert Apple Yosemite mit einer alten bashVersion aus?).
Ich denke, die SHELLUmgebungsvariable spiegelt die tatsächliche Standard-Anmeldeshell für den Benutzer wider, steuert sie jedoch nicht . Zum Beispiel, wenn, sagen wir, bashIhr Standard war und Sie ein neues öffnen bashShell - Fenster von Terminal dann $ export SHELL="/bin/zsh"; echo "$SHELL"zeigen würde , /bin/zshaber keine tatsächliche Änderung tritt auf, weil , wenn Sie ein neues Shell - Fenster von Terminal öffnen und tun $ echo $0dann würden Sie sehen -bash( $0enthält den Namen und Pfad des Befehls, der in diesem Fall das Shell-Fenster gestartet hat bash, und der -nebenstehende Befehl gibt an, dass es sich um eine Login-Shell handelt.
Wie @ mklement0 hervorhob, wird die tatsächliche Standard-Anmeldeshell für den Benutzer durch die UserShellEigenschaft im Benutzerdatensatz in der internen Datenbank des Systems gesteuert. Diese kann mit dem Befehlszeilenprogramm abgefragt und aktualisiert werden dscl. Diese Informationen werden an Ihre Terminal-App übergeben, wenn Sie ein Shell-Fenster öffnen.
Was chsh -s /bin/zshtut , ist diese Änderung UserShellEigenschaft es auf zsh- Sie können dies überprüfen , indem Sie dscl . -read /Users/$USER/ UserShellunmittelbar danach, und Sie werden sehen UserShell: /bin/zsh. Die Änderung wird jedoch im aktuellen Fenster erst ausgeführt, wenn Sie etwas tun, wie exec su - $USERvon @ mklement0 vorgeschlagen, oder bis Sie ein Shell-Fenster schließen und öffnen.
/etc/shells? Das Handbuch besagt, dass die von Ihnen angegebene Shell nicht als Standard-Shell betrachtet wird, wenn sie sich nicht in dieser Datei befindet.