Schauen Sie hier für die gute Erklärung und Lösung gepostet von @ mklement0 [in Bezug auf ein bash
Upgrade Problem.
Ich hatte ein ähnliches Problem, als ich auf meinem System (OS X 10.10.1) das Gegenteil tat: bash
die Standard-Login-Shell nach der Installation erneut zu erstellen oh-my-zsh
, die zsh
den Standard machte, und dann bash
mit Homebrew von 3.2.53 auf 4.3.30 zu aktualisieren ( Warum liefert Apple Yosemite mit einer alten bash
Version aus?).
Ich denke, die SHELL
Umgebungsvariable spiegelt die tatsächliche Standard-Anmeldeshell für den Benutzer wider, steuert sie jedoch nicht . Zum Beispiel, wenn, sagen wir, bash
Ihr Standard war und Sie ein neues öffnen bash
Shell - Fenster von Terminal dann $ export SHELL="/bin/zsh"; echo "$SHELL"
zeigen würde , /bin/zsh
aber keine tatsächliche Änderung tritt auf, weil , wenn Sie ein neues Shell - Fenster von Terminal öffnen und tun $ echo $0
dann würden Sie sehen -bash
( $0
enthä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 UserShell
Eigenschaft 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/zsh
tut , ist diese Änderung UserShell
Eigenschaft es auf zsh
- Sie können dies überprüfen , indem Sie dscl . -read /Users/$USER/ UserShell
unmittelbar 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 - $USER
von @ 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.