Umgebungsvariablen, die auch von nicht interaktiven Shells verwendet werden (z. B. ein von Ihnen geschriebenes Shell-Skript), sollten berücksichtigt werden .zshenv.
Francisco
Wird es auch ~/.zshenvvon Login-Shells bezogen? Sollte PATHdort definiert werden?
Jordan
1
PATH~/.zshenvDies ist wahrscheinlich das beste Beispiel für eine Variable, die im Inneren definiert werden sollte. Diese Datei wird von jeder zsh-Sitzung bezogen (es sei denn, Sie verwenden eine Option, um diese zu deaktivieren). Sehen Sie man zshfür eine Überprüfung, welche Dateien bezogen werden und in welcher Reihenfolge.
Francisco
Ok, danke @Francisco, ich werde die Manpage lesen.
jordelver
Antworten:
21
Wenn Sie möchten, dass Programme von zsh ausgeführt werden, um die Variable anzuzeigen, exportieren Sie sie.
Als Pfad möchten Sie wahrscheinlich exportieren.
Anstelle von export PATH=/some/pathSie wahrscheinlich möchten export PATH="$PATH:/some/path", es sei denn, Sie möchten den Systemvoreinstellungspfad vollständig löschen.
Das ist großartig Danke. Dann verwende ich jetzt in der Regel den Export.
jordelver
20
Demure hat Ihre spezielle Frage bereits beantwortet. Dies ist jedoch eine zshFrage und ungefähr PATH. Hier ist ein weiterer Punkt: Neben der Standardvariablen $PATHgibt es auch $pathein Array. Hier sehen Sie den Unterschied (Doppelpunkte oder nicht ...):
Beide Varianten werden automatisch synchron gehalten. Was sind die Vorteile eines Arrays?
Letzteres können Sie über deklarieren, typeset -U pathum "nur das erste Vorkommen jedes duplizierten Wertes zu behalten" (von man zshbuiltins). Das bedeutet, dass Sie Ihren Pfad sauber halten, auch wenn Sie Ihren nacheinander beziehen ~/.zshrc(weil Sie ihn geändert haben oder was auch immer) und ihn nicht immer wieder mit denselben Werten überladen.
Danke, das war eigentlich eine Anschlussfrage. Ich werde meinen Weg patheher mit als mit verwalten PATH.
jordelver
1
Freut mich zu hören, da ich schon befürchtet habe, dass ich OT bin. Btw. Ein weiterer Vorteil, den ich vergessen habe: Sie können einfach über die Elemente mit for i ($path) { print $i # or do something else }.
.zshenv
.~/.zshenv
von Login-Shells bezogen? SolltePATH
dort definiert werden?PATH
~/.zshenv
Dies ist wahrscheinlich das beste Beispiel für eine Variable, die im Inneren definiert werden sollte. Diese Datei wird von jeder zsh-Sitzung bezogen (es sei denn, Sie verwenden eine Option, um diese zu deaktivieren). Sehen Sieman zsh
für eine Überprüfung, welche Dateien bezogen werden und in welcher Reihenfolge.Antworten:
Wenn Sie möchten, dass Programme von zsh ausgeführt werden, um die Variable anzuzeigen, exportieren Sie sie.
Als Pfad möchten Sie wahrscheinlich exportieren.
Anstelle von
export PATH=/some/path
Sie wahrscheinlich möchtenexport PATH="$PATH:/some/path"
, es sei denn, Sie möchten den Systemvoreinstellungspfad vollständig löschen.quelle
Demure hat Ihre spezielle Frage bereits beantwortet. Dies ist jedoch eine
zsh
Frage und ungefährPATH
. Hier ist ein weiterer Punkt: Neben der Standardvariablen$PATH
gibt es auch$path
ein Array. Hier sehen Sie den Unterschied (Doppelpunkte oder nicht ...):Beide Varianten werden automatisch synchron gehalten. Was sind die Vorteile eines Arrays?
typeset -U path
um "nur das erste Vorkommen jedes duplizierten Wertes zu behalten" (vonman zshbuiltins
). Das bedeutet, dass Sie Ihren Pfad sauber halten, auch wenn Sie Ihren nacheinander beziehen~/.zshrc
(weil Sie ihn geändert haben oder was auch immer) und ihn nicht immer wieder mit denselben Werten überladen.path+=(/new/path)
Ihrem PATH ein neues Verzeichnis hinzufügen. Um ein Element zu entfernen, müssen Sie einige Tricks anwenden, siehe zB /programming//q/3435355/2037712 oder http://www.zsh.org/mla/users//2005/msg01132.htmlfor i ($path) { print $i # or do something else }
Zum Schluss hier noch ein Auszug aus meiner Konfiguration:
quelle
path
eher mit als mit verwaltenPATH
.for i ($path) { print $i # or do something else }
.