zsh - Unterscheidung zwischen Quelle ~ / .zshrc und Shell, die anfänglich .zshrc liest

691
Ryan Erwin

Gibt es eine Befehls- oder Umgebungsvariable, auf die ich in meinem testen kann ~/.zshrc, die unterscheidet, wenn ich source ~/.zshrcmeine Konfiguration aktualisiere und wann die Shell ~/.zshrcbeim Initialisieren liest ?

Meine Lösung besteht bisher darin, eine Variable am Ende von zu setzen ~/.zshrcund diese auf nachfolgende Anweisungen zu testen, aber ich bin neugierig, ob es eine sauberere Möglichkeit gibt, diese Informationen direkt aus dem System oder der Umgebung abzurufen, anstatt sie in einem So fühlt sich das so zerbrechlich an ....

# somewhere in ~/.zshrc  if [[ -n $CONSOLE_ALREADY_RUNNING ]]; then echo "we've alredy loaded ~/.zshrc" echo "so you must be sourcing it" fi  # many more lines of ~/.zshrc commands  # last line of ~/.zshrc export CONSOLE_ALREADY_RUNNING=1 

Anscheinend sollte es eine sauberere Methode geben, um zu testen, ob ich gerade über neu laden source /.zshrcoder ob .zshrceine neue Instanz ausgeführt wird zsh, die gerade in den Speicher geladen wurde.

4
Siteübergreifendes Duplikat: [Wie kann ein zsh-Skript testen, ob es beschafft wird?] (// unix.stackexchange.com/q/73008) DavidPostill vor 7 Jahren 0
Die Suche nach "zsh, woher weiß ich, ob ein Skript beschafft wurde" hätte Ihnen die Antwort als zweiten Link gegeben. DavidPostill vor 7 Jahren 0
@DavidPostill, vielen Dank für Ihre Hilfe. Ich suchte nach allem, was mir einfiel, aber ich dachte immer "differenzieren ...". Die Referenzen, die ich fand, waren nur im Sinne von: Unterschied zwischen Quelle und. und alles konzentrierte sich auf bash, obwohl ich nach zsh gesucht hatte ... Jedenfalls haben Sie und Timotree die Antwort gefunden. Vielen Dank an jeden von euch! Ryan Erwin vor 7 Jahren 0

1 Antwort auf die Frage

4
timotree

$ZSH_EVAL_CONTEXTist, "toplevel"wenn Sie das Skript von einer Shell aus aufrufen. (zum Beispiel ./script) $ZSH_EVAL_CONTEXTist, "toplevel:file"wenn Sie das Skript als Quelle verwenden. (zum Beispiel source script) $ZSH_EVAL_CONTEXTist, "file"wenn es automatisch als Laufzeitkonfiguration ausgeführt wird. (wie ~/.zshrcwäre.)

Die Variable hier gefunden .

Genial. Vielen Dank @ Timotree. Ich dachte, es muss einen richtigen Weg geben, dies zu tun ... ZSH_EVAL_CONTEXT ist genau das, wonach ich gesucht habe, aber ich wusste nicht, wie der Name war, es fiel mir wirklich schwer, ihn zu finden! Mein allererster Stackuser-Beitrag ... Vielen Dank für Ihre Hilfe! Ryan Erwin vor 7 Jahren 0
@ Ryan mein Vergnügen! Dank geht auch an DavidPostill, der mir bei der Suche geholfen hat. timotree vor 7 Jahren 0