Ich habe einige Schwierigkeiten, den Wert von $SHELL
in der iTerm-App von OSX zu ändern. iTerm startet in /bin/zsh
, aber der Wert von $SHELL
scheint sich nicht zu ändern.
Was ich getan habe:
- "Befehl" wie
/bin/zsh
im Konfigurationsfenster von iTerm geändert. - Wird ausgeführt
chsh
, um die Shell in zu ändern/bin/zsh
. - Bestätigt, dass iTerm in gestartet wurde
/bin/zsh
HINWEIS 1: In der Stock Terminal-App von OSX "Terminal.app":
echo $SHELL
/bin/zsh
HINWEIS 2: In der beliebten Terminal-App von OSX "iTerm.app":
$ echo $SHELL
/bin/bash
$ echo $USER
$ melvkim
$ chsh -s /bin/zsh
Changing shell for melvkim.
Password for melvkim:
chsh: no changes made
/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.Antworten:
Das Problem waren die widersprüchlichen Einstellungen der "iTerm" -App mit der Shell. Zum Auflösen habe ich den Befehl "Login Shell" im iTerm-Einstellungsfenster zurückgesetzt:
Dann habe ich ausgeführt
chsh
, um es als zu ändern/bin/zsh
.Um das Problem zu reproduzieren (mit $ SHELL als gesetzt
/bin/bash/
, obwohl die Login-Shell/bin/zsh
aktiviert ist ), musste ich nur die Einstellung "iTerm" wieder auf "Befehl: / bin / zsh /" ändern.quelle
Das
-s
Flag fürchsh
nur Versuche, die Shell zu ändern, schlägt wahrscheinlich aufgrund von Open Directory fehl: Das übliche UNIX-System 'chsh' würde den/etc/passwd
Eintrag ändern . Ich konnte jedochchsh
ohne Argumente, die mir einen Editor gaben, und die folgenden Informationen ausführen :Ich konnte den Eintrag "Shell:" bearbeiten
/bin/zsh
und nachfolgende Terminalfenster mit einer Z-Shell-Eingabeaufforderung öffnen.quelle
chsh
ohne Argumente versucht . Immer noch kein Glück. Die Variable ändert sich nicht. In der Tat, als der Editor geladen wurde, zeigte es/bin/zsh
.$SHELL
auf iTerm nicht ändern . Bitte beziehen Sie sich auf meine Antwort für Details. Danke!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 erstellenoh-my-zsh
, diezsh
den Standard machte, und dannbash
mit Homebrew von 3.2.53 auf 4.3.30 zu aktualisieren ( Warum liefert Apple Yosemite mit einer altenbash
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 öffnenbash
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 hatbash
, 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 werdendscl
. Diese Informationen werden an Ihre Terminal-App übergeben, wenn Sie ein Shell-Fenster öffnen.Was
chsh -s /bin/zsh
tut , ist diese ÄnderungUserShell
Eigenschaft es aufzsh
- Sie können dies überprüfen , indem Siedscl . -read /Users/$USER/ UserShell
unmittelbar danach, und Sie werden sehenUserShell: /bin/zsh
. Die Änderung wird jedoch im aktuellen Fenster erst ausgeführt, wenn Sie etwas tun, wieexec su - $USER
von @ mklement0 vorgeschlagen, oder bis Sie ein Shell-Fenster schließen und öffnen.quelle
Versuchen Sie, den folgenden Befehl auszuführen:
chsh -s /bin/zsh
vom Standard-Mac-Terminal.quelle