Was sollte / sollte nicht in .zshenv, .zshrc, .zlogin, .zprofile, .zlogout gehen?


132

Ich bin auf der Suche nach Richtlinien, was man in den verschiedenen Startdateien für einschließen soll und was nicht zsh.

Ich verstehe die Reihenfolge der Beschaffung dieser Dateien und die Bedingungen, unter denen sie beschafft werden, aber es ist mir immer noch nicht klar, was in den einzelnen Dateien vor sich gehen soll.


Antworten:


156

Hier ist eine nicht ausschließliche Liste der Inhalte jeder Datei:

  • Da .zshenvimmer Quellen verwendet werden, enthält es oft exportierte Variablen, die anderen Programmen zur Verfügung stehen sollten. Zum Beispiel $PATH, $EDITORund $PAGERwerden häufig gesetzt in .zshenv. Außerdem können Sie einstellen , $ZDOTDIRin .zshenveinen alternativen Ort für den Rest Ihrer zsh Konfiguration angeben.
  • .zshrcist für die interaktive Shell-Konfiguration. Dort legen Sie mit den Befehlen setoptund Optionen für die interaktive Shell fest unsetopt. Sie können auch Shell-Module laden, Ihre Verlaufsoptionen festlegen, Ihre Eingabeaufforderung ändern, zle und Vervollständigung einrichten usw. Sie legen auch alle Variablen fest, die nur in der interaktiven Shell verwendet werden (z $LS_COLORS. B. ).
  • .zloginwird beim Start einer Login-Shell bezogen. Diese Datei wird häufig zum Starten von X verwendet startx. Einige Systeme starten X beim Booten, daher ist diese Datei nicht immer sehr nützlich.
  • .zprofileist im Grunde das Gleiche wie mit der .zloginAusnahme, dass es direkt vor und .zshrcnicht direkt danach bezogen wird. Laut der zsh-Dokumentation " .zprofileist dies eine Alternative zu" .zlogin "für ksh-Fans. Beide dürfen nicht zusammen verwendet werden, obwohl dies auf Wunsch durchaus möglich ist."
  • .zlogout wird manchmal zum Löschen und Zurücksetzen des Terminals verwendet.

Sie sollten die Konfigurationsdateien von zufälligen Github-Benutzern durchgehen , um eine bessere Vorstellung davon zu erhalten, was jede Datei enthalten sollte.


3
Aus Gründen der Übersichtlichkeit wird .zlogin nach .zshrc bezogen ( man zshallDetails siehe ).
Aaron

8
Beachten Sie bei der Einstellung $PATHin .zshenvverschiedenen anderen Dateien alle sind nach dieser Datei stammen , die diesen Wert überschreiben. Siehe zsh.org/mla/users/2003/msg00600.html .
Beau Barker

Wo sollte $LANGund $LC_ALLgehen?
Lenar Hoyt

23
Nur für meine eigenen Notizen / Bestätigungen und um anderen zu helfen, lautet die endgültige Reihenfolge .zshenv→ [ .zprofilewenn angemeldet] → [ .zshrcwenn interaktiv] → [ .zloginwenn angemeldet] → [ .zlogoutmanchmal].
Gabriel L.

23

Hier eine Liste, was jede Datei meiner Meinung nach enthalten sollte / nicht enthalten sollte:

.zshenv

[Jedes Mal lesen]

Es wird immer als Quelle verwendet, daher sollten Umgebungsvariablen festgelegt werden, die häufig aktualisiert werden müssen . PATH (oder sein zugehöriges Gegenstück Pfad ) ist ein gutes Beispiel , weil Sie wahrscheinlich nicht aktualisieren mögen , dass Ihre gesamte Sitzung neu zu starten , um es zu machen. Durch erneutes Öffnen eines Terminalemulators wird eine neue Zsh-Instanz mit dem aktualisierten PATH- Wert gestartet .

Beachten Sie jedoch, dass diese Datei auch dann gelesen wird, wenn Zsh gestartet wird, um einen einzelnen Befehl (mit der Option -c ) auszuführen , selbst von einem anderen Tool wie make. Sie sollten sehr vorsichtig sein, um das Standardverhalten von Standardbefehlen nicht zu ändern, da es einige Tools beschädigen kann, die sie verwenden (indem Sie beispielsweise Aliase festlegen). Sicher ist es nicht verboten, wie Sie wissen, was Sie tun.

.zprofile

[Beim Login lesen]

Ich persönlich behandle diese Datei mit Ausnahme .zshenvvon Befehlen und Variablen, die einmal gesetzt werden sollten oder die nicht häufig aktualisiert werden müssen :

  • Umgebungsvariablen zum Konfigurieren von Tools (Flags zum Kompilieren, Speicherort des Datenordners usw.)
  • Konfiguration, die Befehle (wie SCONSFLAGS="--jobs=$(( $(nproc) - 1 ))") ausführt, da die Ausführung einige Zeit in Anspruch nehmen kann.

Wenn Sie diese Datei ändern, können Sie die Konfigurationsaktualisierungen abrufen, indem Sie die aktuelle Shell durch eine neue als Anmeldeshell ersetzen:

exec zsh --login

.zshrc

[Lesen wenn interaktiv]

Ich stelle hier alles ein, was nur für die interaktive Nutzung benötigt wird :

  • Prompt,
  • Befehlsabschluss,
  • Befehlskorrektur,
  • befehlsvorschlag,
  • Befehlshervorhebung,
  • Ausgabefarbe,
  • Aliase,
  • Tastenbelegungen,
  • Befehlshistorienverwaltung,
  • sonstige interaktive Tools (auto_cd, manydots-magic) ...

.zlogin

[Beim Login lesen]

Diese Datei ist wie .zshprofile, wird aber nachgelesen .zshrc. Ich halte die Shell zu diesem Zeitpunkt für vollständig eingerichtet.

Ich verwende es also, um externe Befehle zu starten, die das Shell-Verhalten nicht ändern (z. B. einen Login-Manager).

.zlogout

[Beim Abmelden lesen] [In der Login-Shell]

Hier können Sie Ihr Terminal oder andere Ressourceneinstellungen bei der Anmeldung löschen.

Wie ich wähle, wo ich eine Einstellung mache

  • Es wird von einem Befehl benötigt , der nicht interaktiv ausgeführt wird :.zshenv
  • Es sollte auf einer neuen Shell aktualisiert werden :.zshenv
  • Es wird ein Befehl ausgeführt, dessen Ausführung einige Zeit in Anspruch nehmen kann :.zprofile
  • es hängt mit der interaktiven Nutzung zusammen :.zshrc
  • Es ist ein Befehl, der ausgeführt wird, wenn die Shell vollständig eingerichtet ist :.zlogin
  • Es gibt eine Ressource frei, die bei der Anmeldung erworben wurde:.zlogout

0

Legen Sie keine ssh-agentAnrufe in .zshenv. Mein lessBefehl zeigte keine Textdateien mehr an, wahrscheinlich weil seine Optionen von Prezto ( export LESS='-F -g -i -M -R -S -w -X -z-4'in .zprofile) angepasst wurden .

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.