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?


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 ...):

$ 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

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