Wie kann zsh unter Mac OS X (in iTerm) als Login-Shell ausgeführt werden?

149

Wenn zsh unter Mac OS X als Anmeldeshell festgelegt ist und von iTerm gestartet wird, berücksichtigt zsh nicht, dass es als Anmeldeshell ausgeführt wird, obwohl es als '-zsh' gestartet wird ('-' als erstes Zeichen von arg [0]), was bedeuten soll, dass es als Login-Shell beginnen soll.

Wenn ich also die Login-Shell auf bash setze, erkennt bash dieses erste '-' in $ 0 und wird als Login-Shell ausgeführt, zsh jedoch nicht, obwohl es so scheint, als ob es sollte.

Gibt es eine Möglichkeit, zsh entweder das '-' in arg [0] erkennen zu lassen oder iTerm die Shell mit einem --login-Befehlszeilenargument ausführen zu lassen?

Ivan Tarasov
quelle
2
Ich weiß, dass es eine Weile her ist, seit dies gefragt wurde, aber bitte erwägen Sie, die Antwort von @Harold Putman zu akzeptieren. Es ist die einzige Adresse, auf der die gestellte Frage beantwortet wird.
Craig S. Cottingham

Antworten:

106

Setzen Sie in iTerm -> Einstellungen -> Registerkarte "Profile" -> Abschnitt "Allgemein" den Befehl auf: / bin / zsh --login

/ bin / zsh --login

Harold Putman
quelle
1
iterm2 scheint diese Option auf der Registerkarte Allgemein nicht zu haben. Irgendeine Idee, wie man in iterm2 erreicht, ohne die Login-Shell zu ändern?
Lloyd Dewolf
6
Es ist die Registerkarte "Allgemein" auf der Registerkarte "Profile".
Harold Putman
Aha! Das ist verwirrend, dass es sowohl eine Registerkarte Allgemein als auch ein Profil> Allgemein gibt.
Lloyd Dewolf
2
oder in meinem Fall/usr/local/bin/zsh --login
Yar
Ich verwende dies, um meine Shell zu ändern, anstatt die / etc / shells zu bearbeiten, da dies verhindern sollte, dass ein Problem mit meiner Shell nach einem Update unbrauchbar wird.
Sal
220
chsh -s $(which zsh)

Sie werden aufgefordert, Ihr Kennwort einzugeben. Sobald Sie jedoch Ihre Einstellungen aktualisiert haben, werden alle neuen iTerm / Terminal-Sitzungen, die Sie auf diesem Computer starten, standardmäßig auf zsh gesetzt.

Damien Wilson
quelle
2
Bitte lesen Sie zuerst die Frage. Das Problem besteht nicht darin, die Standard-Shell festzulegen. Das Problem besteht darin, dass zsh nicht erkennt, dass es als Anmeldeshell gestartet wurde.
Ivan Tarasov
1
Ah, ich entschuldige mich. Haben Sie versucht, mit dem Flag -i zsh zu zwingen, im interaktiven Modus zu starten?
Damien Wilson
11
Seine Antwort lässt zsh als Login-Shell unter Mac OS X in iTerm laufen. Es geht einfach nicht so, wie Sie es beschreiben. Aber es löst das Problem, das Sie in Frage stellen (im Titel und nicht im Körper). Die Frage, mit der Sie im Körper enden, ist eine ganz andere Frage. Wenn dies Ihre eigentliche Frage ist (anstatt wie zsh als Login-Shell ausgeführt wird), sollten Sie die Frage im Titel möglicherweise umformulieren.
Bilderstürmer
45
Wenn chshSie etwas wie "Nicht-Standard-Shell" erfahren, bedeutet dies, dass Sie den Pfad der neuen Shell hinzufügen müssen /etc/shells. Dies kann passieren, wenn Sie beispielsweise zu einer von homebrew installierten Version von zsh wechseln, die es einfügt /usr/local/bin/zsh.
Shovavnik
1
chsh -s $(which zsh)kann verwendet werden, um den richtigen Pfad sicherzustellen.
Daniel Doezema
56

Gehen Sie zum Bereich Benutzer & Gruppen in den Systemeinstellungen -> Benutzer auswählen -> Klicken Sie auf das Schloss, um Änderungen vorzunehmen (untere linke Ecke) -> Klicken Sie mit der rechten Maustaste auf den aktuellen Benutzer. Wählen Sie Erweiterte Optionen ... -> Wählen Sie die Anmeldeshell aus: / bin / zsh und OK

Arunkumar
quelle
3
Das hat mir den Tag gerettet. Ich bin auf Osx Mavericks.
Qed
Dies funktioniert für das Standard-Zsh, nicht für das von Brew installierte.
Imam Bux
19

Der Befehl zum Ändern der Shell beim Start lautet chsh -s <path_to_shell>. Die Standard-Shells in Mac OS X werden im binVerzeichnis installiert. Wenn Sie also zum Standard wechseln zshmöchten, verwenden Sie Folgendes

chsh -s /bin/zsh

Wenn Sie eine andere Version von verwenden zsh, müssen Sie diese Version möglicherweise hinzufügen, /etc/shellsum die nicht standardmäßige Shell-Nachricht zu vermeiden. Wenn Sie beispielsweise die Home-Brew-Version von möchten zsh, müssen Sie /usr/local/bin/zshdie oben genannte Datei hinzufügen , was Sie mit einem Befehl tun sudo sh -c "echo '/usr/local/bin/zsh' >> /etc/shells"und dann ausführen können

chsh -s /usr/local/bin/zsh

Oder wenn Sie das Ganze in einem Befehl erledigen möchten, kopieren Sie dies einfach und fügen Sie es ein, wenn Sie zsh bereits installiert haben

sudo sh -c "echo '/usr/local/bin/zsh' >> /etc/shells" && chsh -s /usr/local/bin/zsh
hasanain
quelle
2
Ich denke nicht, dass es fair war, diese Antwort abzulehnen. Requisiten, da dies die einzige ist, die /etc/shellsim Hauptteil der Antwort selbst erwähnt wird.
Heymatthew
1
@heymatthew der Grund, warum es abgelehnt wird, ist, dass es die gestellte Frage nicht beantwortet hat. Es beantwortete eine völlig andere, nicht verwandte Frage.
Tabitha
17

Haben Sie versucht , in das Shell - Eintrag Bearbeitung Kontoeinstellungen .

Gehen Sie zu den Kontoeinstellungen, entsperren Sie und klicken Sie mit der rechten Maustaste auf Ihr Benutzerkonto, um das Dialogfeld Erweiterte Einstellungen aufzurufen. Ihre Shell sollte / bin / zsh sein, und Sie können diesen Aufruf entsprechend bearbeiten (dh das Argument --login hinzufügen).

Brian Agnew
quelle
Leider funktioniert das nicht: Ich kann mit chsh festlegen, welche Shell ich mag (solange ich diese Shell in / etc / shells aufgelistet habe), aber ich kann der Shell im Dialogfeld "Erweiterte Einstellungen" keine Befehlszeilenargumente hinzufügen (iTerm schlägt fehl) um die Shell zu starten).
Ivan Tarasov
Einige der Syntax hat sich in OS X geändert, aber das Wesentliche ist, Ihre Standard-Shell auf / bin / zsh zu setzen, wie Brian oben angibt
EngineerDave
7
Ich liebe so. Ich habe diese Antwort gerade erst verwendet und erst dann festgestellt, dass ich sie vor fast 4 Jahren geschrieben habe!
Brian Agnew
-2

Verwenden Sie das loginDienstprogramm, um eine Anmeldeshell zu erstellen. Angenommen, der Benutzer, bei dem Sie sich anmelden möchten, hat den Benutzernamen Alice und zsh ist installiert /opt/local/bin/zsh(z. B. eine neuere Version, die über MacPorts installiert wurde). Gehen Sie in iTerm 2 zu Einstellungen, Profile, wählen Sie das Profil aus, das Sie einrichten möchten, und geben Sie Befehl ein :

login -pfq Alice /opt/local/bin/zsh

Sehen Sie man loginfür weitere Informationen zu den Optionen.

Robin Klose
quelle
Dies ist zu 100% keine Antwort. Ja ändert standardmäßig die Shell, die Sie erzeugen. Dies ist jedoch keine Antwort darauf, wie eine "Anmelde" -Instanz einer Shell erstellt wird, dh alle Variablen von Grund auf neu erstellt werden.
Tabitha