zsh config - exportieren oder nicht exportieren?

22

Beim Setzen von Variablen in meinem ~/.zshrckann ich beides verwendenexport

export PATH=/some/path

oder nicht

PATH=/some/path

Wie unterscheiden sich diese und welche soll ich verwenden?

jordelver
quelle
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.

zurückhaltend
quelle
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 ...):

$ print $PATH
/bin:/usr/bin:/usr/local/bin:/usr/X11R6/bin
$print $path
/bin /usr/bin /usr/local/bin /usr/X11R6/bin

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.
  • Mit können Sie 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.html
  • Über können Sie die Elemente im PATH ganz einfach durchlaufen for i ($path) { print $i # or do something else }

Zum Schluss hier noch ein Auszug aus meiner Konfiguration:

typeset -U path
path=(/new/path1
      /new/path2
      $path)
export PATH
mpy
quelle
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 }.
mpy