it-swarm.com.de

Wie wende ich die Änderungen nach der Bearbeitung auf meine .zshrc-Datei an?

Ich habe gerade das .zshrc Datei zum Konfigurieren meiner zsh unter FreeBSD.

Beispiel: Aktualisieren der Systemvariablen PATH:

path+=/usr/local/openjdk12/bin

Wie werden die Änderungen wirksam?

Muss ich mich abmelden und erneut anmelden? Gibt es eine Möglichkeit, diese Datei sofort auszuführen?

6
Basil Bourque

Starten Sie zsh neu

Zsh liest .zshrc, Wenn es startet. Sie müssen sich nicht abmelden und wieder anmelden. Wenn Sie das Terminal schließen und ein neues öffnen, erhalten Sie Ihr neues .zshrc In diesem neuen Terminal. Aber Sie können dies direkter machen. Sagen Sie zsh einfach, dass es sich neu starten soll:

exec zsh

Wenn Sie dies an einer zsh-Eingabeaufforderung ausführen, wird die aktuelle Instanz von zsh durch eine neue ersetzt, die im selben Terminal ausgeführt wird. Die neue Instanz hat die gleichen mgebungs Variablen wie die vorherige, hat jedoch frische Shell (nicht exportierte) Variablen und startet einen neuen Verlauf (damit sie gemischt wird in Befehlen von anderen Terminals in typischen Konfigurationen). Hintergrundjobs werden abgelehnt.

Lesen Sie erneut .zshrc

Sie können zsh auch anweisen, .zshrc Erneut zu lesen. Dies hat den Vorteil, dass der Shell-Verlauf, die Shell-Variablen und das Wissen über Hintergrundjobs erhalten bleiben. Aber je nachdem, was Sie in Ihren .zshrc Eingegeben haben, kann dies funktionieren oder nicht. Beim erneuten Lesen von .zshrc Werden Befehle ausgeführt, die möglicherweise nicht oder nicht gut funktionieren, wenn Sie sie zweimal ausführen.

. ~/.zshrc

Es gibt einfach zu viele Dinge, die Sie tun können, um alles aufzulisten, was in Ordnung und nicht in Ordnung ist, um .zshrc Eingeben zu können, wenn Sie es zweimal ausführen möchten. Hier sind nur einige häufige Probleme:

  • Wenn Sie an eine Variable anhängen (z. B. fpath+=(~/.config/zsh) oder chpwd_functions+=(my_chpwd)), werden dieselben Elemente erneut angehängt, was möglicherweise ein Problem darstellt oder nicht.
  • Wenn Sie Aliase definieren und denselben Namen wie ein Befehl verwenden, führt der Befehl jetzt den Alias ​​aus. Dies funktioniert beispielsweise wie folgt:
    function foo { … }
    alias foo='foo --common-option'
    
    Dies ist jedoch nicht der Fall, da foo () beim zweiten Zugriff auf die Datei den Alias ​​erweitert:
    foo () { … }
    alias foo='foo --common-option'
    
  • Wenn Sie eine vorhandene zsh-Funktion patchen, patchen Sie jetzt Ihre eigene Version, was wahrscheinlich zu einem Chaos führen wird.
  • Wenn Sie beispielsweise die Bindungen zweier Schlüssel austauschen, wird dies beim zweiten Mal nicht das tun, was Sie möchten.

Änderungen an Shells-Initialisierungsdateien werden in der next Shell aktiv, die Sie starten, z. B. wenn Sie ein neues grafisches Terminal aufrufen oder sich abmelden und erneut anmelden. Wenn Sie Änderungen vorgenommen haben, die sich in irgendeiner Weise auf Ihre Desktop-Umgebung auswirken sollten (ich weiß nicht, um welche Art von Änderung es sich handelt), ist das Abmelden und erneute Anmelden erforderlich.

Sie könnten Quelle der Datei mit . /path/to/filename (. ~/.zshrc in Ihrem Fall) oder starten Sie eine neue Shell-Sitzung über die Befehlszeile mit zsh, aber dies ist fast nie eine gute Idee, da dies unerwünschte Folgen haben kann, z. B. das Hinzufügen doppelter Pfade zum $PATH Variable oder Start extra ssh-agent Prozesse oder was auch immer Sie in dieser Datei tun. Die Änderungen wären auch kein sichtbares Programm, das bereits gestartet wurde.

Für eine Änderung wie das Hinzufügen zum $PATH bedingungslos könnten Sie natürlich einfach den hinzugefügten Befehl in der aktuellen Shell ausführen:

$ path+=/usr/local/openjdk12/bin

Dies würde (in zsh) das /usr/local/openjdk12/bin Verzeichnis bis zum Ende von $PATH (und bis zum Ende des $path Array in zsh) in der aktuellen Shell-Sitzung. Wieder diese Änderung zu $PATH würde bereits laufende Prozesse nicht beeinflussen.

4
Kusalananda

Sie könnten die neue Datei als Quelle verwenden, was für einige Änderungen funktionieren würde, möglicherweise einschließlich der Aktualisierung der PATH-Variablen (abhängig von anderen Zeilen). Bei der Beschaffung wird jedoch einfach .zshrc Erneut ausgeführt, und Sie können unerwartete doppelte Befehle ausführen. Wenn außerdem Zeilen aus dem alten .zshrc Gelöscht würden, würden sie nicht aus der Sitzung "gelöscht".

Am saubersten ist es, sich einfach ab- und wieder anzumelden. Sie müssen dies nur für die Terminalsitzung tun, nicht für die gesamte Desktop-Umgebung.

3
Sparhawk