chsh ändert $ SHELL nicht

9

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

Was ich getan habe:

  1. "Befehl" wie /bin/zshim Konfigurationsfenster von iTerm geändert.
  2. Wird ausgeführt chsh, um die Shell in zu ändern /bin/zsh.
  3. 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
Melvynkim
quelle
1
Hast du reingeschaut /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.
Bob Dalgleish

Antworten:

5

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:

iTerm.app -> Einstellungen -> Profile -> Allgemein -> Befehl -> Klicken Sie auf "Login-Shell"

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/zshaktiviert ist ), musste ich nur die Einstellung "iTerm" wieder auf "Befehl: / bin / zsh /" ändern.

Melvynkim
quelle
1

Das -sFlag für chshnur Versuche, die Shell zu ändern, schlägt wahrscheinlich aufgrund von Open Directory fehl: Das übliche UNIX-System 'chsh' würde den /etc/passwdEintrag ändern . Ich konnte jedoch chshohne Argumente, die mir einen Editor gaben, und die folgenden Informationen ausführen :

# 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:" bearbeiten /bin/zshund nachfolgende Terminalfenster mit einer Z-Shell-Eingabeaufforderung öffnen.

Nevin Williams
quelle
Ich habe es chshohne Argumente versucht . Immer noch kein Glück. Die Variable ändert sich nicht. In der Tat, als der Editor geladen wurde, zeigte es /bin/zsh.
Melvynkim
Versuchen Sie, die Shell mit dem Editor zu ändern. Ich habe einen Screenshot von mir gemacht, als ich von / bin / tcsh zu / bin / zsh und zurück gewechselt bin. bonmot.ca/~nevin/chsh.mov
Nevin Williams
Vielen Dank, dass Sie sich die Zeit genommen haben, Ihren Screencast aufzunehmen! Ihre Lösung sollte auf anderen Terminalemulatoren funktionieren, aber ich konnte mich $SHELLauf iTerm nicht ändern . Bitte beziehen Sie sich auf meine Antwort für Details. Danke!
Melvynkim
1

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.

Ramius
quelle
0

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

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