Wie ändere ich die Standard-Shell in iTerm?

Ich habe einige Schwierigkeiten, den Wert von $SHELLin der iTerm-App von OSX zu ändern. iTerm beginnt in /bin/zsh, aber der Wert von $SHELLscheint sich nicht zu ändern.

Was ich getan habe:

  1. Geänderter "Befehl" wie /bin/zshim Konfigurationsfenster von iTerm.
  2. Wird ausgeführt chsh, um die Shell in /bin/zsh.
  3. Bestätigt, dass iTerm gestartet wurde/bin/zsh

ANMERKUNG 1: In der Standard-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
Hast du reingeschaut /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.
Ihr eigentliches Problem besteht nicht darin, die $SHELL zu ändern, sondern Ihre echte Standard-Shell in iTerm. Die Variable wird in der Login-Shell aus der Standard-Shell erstellt, die von verwendet wird iTerm.
könnten Sie Ihre Antwort als richtig markieren, um die Frage als beantwortet zu markieren? Sie können Ihre eigene Antwort als Lösung markieren. Danke!

Antworten (6)

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.

Kumpel von mir hatte das gleiche Problem mit intelliJ.
re: "iTerm.app -> Einstellungen". Ich bin ein langjähriger Linux-Benutzer (deshalb bin ich hier), aber neu bei iOs. Ich finde diese Anleitung einfach nicht. Mehr Anleitung wäre wünschenswert. Ich möchte wirklich bash in IOs!
@StephenHosking mit aktivem iTerm, CMD + ,um die Einstellungen zu erreichen
Entfernen Sie das /am Ende des Shell-Pfads Ihrer iTermEinstellungen, 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/zshim 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.

Das war mein Problem und das hat es gelöst. Danke

Suchen Sie hier nach der hervorragenden Erklärung und Lösung, die 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-Anmelde-Shell erneut zu erstellen, nachdem ich installiert hatte oh-my-zsh, wodurch zshdie Standardeinstellung festgelegt wurde, und dann bashmit Homebrew ( 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 aber nicht . Wenn beispielsweise bashIhre Standardeinstellung war und Sie ein neues bashShell-Fenster vom Terminal aus öffnen, $ export SHELL="/bin/zsh"; echo "$SHELL"wird angezeigt, /bin/zshaber es findet keine tatsächliche Änderung statt, denn wenn Sie ein neues Shell-Fenster vom Terminal aus öffnen und $ echo $0dies tun, sehen Sie -bash( $0enthä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 UserShellEigenschaft 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/zshSie diese UserShellEigenschaft, um sie auf festzulegen. zshSie können dies überprüfen, indem Sie dies dscl . -read /Users/$USER/ UserShellunmittelbar 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 -sFlag for chshversucht nur, die Shell zu ändern, und scheitert wahrscheinlich an Open Directory: Das übliche UNIX-System 'chsh' würde den /etc/passwdEintrag ändern. Ich konnte jedoch chshohne 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.

Ich habe es chshohne Argumente versucht. Immer noch kein Glück. Die Variable ändert sich nicht. Als der Editor geladen wurde, zeigte er tatsächlich /bin/zsh.
Versuchen Sie, die Shell mit dem Editor zu ändern. Ich habe eine Bildschirmaufnahme gemacht, wie ich von /bin/tcsh zu /bin/zsh und zurück gewechselt habe. bonmot.ca/~nevin/chsh.mov
Vielen Dank, dass Sie sich die Zeit genommen haben, Ihren Screencast aufzunehmen und zu posten! Ihre Lösung soll auf anderen Terminalemulatoren funktionieren, aber ich konnte $SHELLauf iTerm nicht wechseln. Einzelheiten finden Sie in meiner Antwort. Danke!

Versuchen Sie, den Befehl auszuführen: chsh -s /bin/zshvom Standard-Mac-Terminal.

Was macht das anders als das OP?
@JMY1000 Wenn Sie versuchen, diesen Befehl von iTerm aus auszuführen, werden die Änderungen nicht wiedergegeben. Sie sollten in der Lage sein, es zum Laufen zu bringen, indem Sie es vom Standardterminal des Mac ausführen.

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.