Ich habe einige Schwierigkeiten, den Wert von $SHELL
in der iTerm-App von OSX zu ändern. iTerm beginnt in /bin/zsh
, aber der Wert von $SHELL
scheint sich nicht zu ändern.
/bin/zsh
im Konfigurationsfenster von iTerm.chsh
, um die Shell in /bin/zsh
./bin/zsh
echo $SHELL
/bin/zsh
$ echo $SHELL
/bin/bash
$ echo $USER
$ melvkim
$ chsh -s /bin/zsh
Changing shell for melvkim.
Password for melvkim:
chsh: no changes made
Das Problem waren die widersprüchlichen Einstellungen der "iTerm"-App mit der Shell. Um das Problem zu lösen, habe ich den Befehl "Login Shell" im iTerm-Einstellungsfenster zurückgesetzt:
iTerm.app -> Einstellungen -> Profile -> Allgemein -> Befehl -> Klicken Sie auf "Login-Shell"
Dann habe ich ausgeführt chsh
, um es als /bin/zsh
.
Um das Problem zu reproduzieren (wobei $SHELL auf gesetzt war /bin/bash/
, obwohl die Login-Shell auf /bin/zsh
) gesetzt war, musste ich nur die Einstellung „iTerm“ wieder auf „Command: /bin/zsh/“ ändern.
CMD + ,
um die Einstellungen zu erreichen/
am Ende des Shell-Pfads Ihrer iTerm
Einstellungen, da dies zu Fehlern in Shell-Skripten führen kann.Ich hatte ein ähnliches Problem, aber ich habe es gelöst , indem ich den Befehl chsh -s /bin/zsh
im Terminal ausgeführt und dann zu navigiert habe
Terminal -> Einstellungen -> Fenster Allgemein
und die Option Shells open with: in Default login shell geändert , während der Befehl (vollständiger Pfad) auf /bin/zsh gesetzt ist . Dies sollte Ihr Problem lösen.
Suchen Sie hier nach der hervorragenden Erklärung und Lösung, die 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-Anmelde-Shell erneut zu erstellen, nachdem ich installiert hatte oh-my-zsh
, wodurch zsh
die Standardeinstellung festgelegt wurde, und dann bash
mit Homebrew ( 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 aber nicht . Wenn beispielsweise bash
Ihre Standardeinstellung war und Sie ein neues bash
Shell-Fenster vom Terminal aus öffnen, $ export SHELL="/bin/zsh"; echo "$SHELL"
wird angezeigt, /bin/zsh
aber es findet keine tatsächliche Änderung statt, denn wenn Sie ein neues Shell-Fenster vom Terminal aus öffnen und $ echo $0
dies tun, sehen Sie -bash
( $0
enthält den Namen und den Pfad des Befehls, der das Shell-Fenster gestartet hat, in diesem Fall bash
, und das -
daneben zeigt an, dass es sich um eine Login-Shell handelt).
Wie @mklement0 betonte, wird die tatsächliche Standard-Anmeldeshell für den Benutzer durch die UserShell
Eigenschaft im Datensatz des Benutzers in der internen Datenbank des Systems gesteuert - diese kann mit dem Befehlszeilendienstprogramm abgefragt und aktualisiert werden dscl
. Diese Informationen werden an Ihre Terminal-App weitergegeben, wenn Sie ein Shell-Fenster öffnen.
Ändern chsh -s /bin/zsh
Sie diese UserShell
Eigenschaft, um sie auf festzulegen. zsh
Sie können dies überprüfen, indem Sie dies dscl . -read /Users/$USER/ UserShell
unmittelbar danach tun, und Sie werden sehen UserShell: /bin/zsh
. Aber die Änderung wird im aktuellen Fenster nichtexec su - $USER
bewirkt, bis Sie etwas tun , wie von @mklement0 vorgeschlagen, oder bis Sie ein Shell-Fenster schließen und öffnen.
Das -s
Flag for chsh
versucht nur, die Shell zu ändern, und scheitert wahrscheinlich an Open Directory: Das übliche UNIX-System 'chsh' würde den /etc/passwd
Eintrag ändern. Ich konnte jedoch chsh
ohne Argumente laufen, was mir einen Editor und die folgenden Informationen gab:
# Changing user information for nevin.
# Use "passwd" to change the password.
##
# Open Directory: /Local/Default
##
Shell: /bin/tcsh
Full Name: Nevin Williams
Office Location:
Office Phone:
Home Phone:
Ich konnte den Eintrag „Shell:“ in ändern /bin/zsh
, und nachfolgende Terminalfenster wurden mit einer Z-Shell-Eingabeaufforderung geöffnet.
chsh
ohne Argumente versucht. Immer noch kein Glück. Die Variable ändert sich nicht. Als der Editor geladen wurde, zeigte er tatsächlich /bin/zsh
.$SHELL
auf iTerm nicht wechseln. Einzelheiten finden Sie in meiner Antwort. Danke!Versuchen Sie, den Befehl auszuführen: chsh -s /bin/zsh
vom Standard-Mac-Terminal.
Ich hatte ein ähnliches Problem. Das Terminal würde sich in bash öffnen. csh -s /bin/zsh würde mit einem Fehler fehlschlagen. Die Untersuchung der Standard-Shell in Systemeinstellungen->Benutzer durch Klicken bei gedrückter Strg-Taste auf meinen Benutzer zeigte, dass /bin/zsh eingestellt war. dscl zeigte /bin/zsh wurde gesetzt. Ich habe versucht, Terminal->Einstellungen auf /bin/zsh zurückzusetzen. Auch das ist gescheitert.
Letztendlich stellte sich heraus, dass es sich um eine Sperrdatei handelte. Unter ~/Library/Preferences habe ich com.apple.Terminal.plist.lockfile und com.apple.Terminal.plist gelöscht. Das hat das Problem behoben. Beim nächsten Start wurde zsh korrekt im Terminal geladen.
Bob Dalgleish
/etc/shells
? Das Handbuch besagt, dass, wenn die von Ihnen angegebene Shell nicht in dieser Datei enthalten ist, sie nicht als Standard-Shell betrachtet wird.Dan
iTerm
. Die Variable wird in der Login-Shell aus der Standard-Shell erstellt, die von verwendet wirdiTerm
.anonym