zsh config - exporter ou ne pas exporter?

23

Lors de la définition des variables dans mon, ~/.zshrcje peux utiliserexport

export PATH=/some/path

ou pas

PATH=/some/path

En quoi diffèrent-elles et lesquelles dois-je utiliser?

jordelver
la source
Les variables d'environnement qui sont également utilisées par des shells non interactifs (par exemple, un script de shell que vous avez écrit) doivent entrer .zshenv.
Francisco
Est également ~/.zshenvfourni par des shells de connexion? Faut- PATHil y définir?
jordelver
1
PATHest probablement le meilleur exemple d'une variable qui devrait être définie à l'intérieur ~/.zshenv, ce fichier provient de n'importe quelle session zsh (à moins que vous n'utilisiez une option pour la désactiver). Voir man zshpour un examen des fichiers qui proviennent et dans quel ordre.
Francisco
Ok, merci @Francisco, je vais lire la page de manuel.
jordelver

Réponses:

21

Si vous souhaitez que les programmes exécutés à partir de zsh voient la var, exportez-la.
Pour le chemin, vous voulez probablement exporter.
Au lieu de cela, export PATH=/some/pathvous le souhaitez probablement export PATH="$PATH:/some/path", sauf si vous avez l'intention d'effacer complètement le chemin prédéfini du système.

sage
la source
C'est génial merci. Je vais maintenant utiliser l'exportation comme règle générale.
jordelver
21

Demure a déjà répondu à votre question spécifique. Cependant, c'est une zshquestion et environ PATH. Voici donc un autre point: à côté de la variable standard $PATH, il y a aussi $path, qui est un tableau. Ici vous voyez la différence (deux-points ou pas ...):

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

Les deux variantes sont automatiquement synchronisées. Alors, quel est l'avantage d'utiliser un tableau?

  • Cette dernière vous permet de déclarer via typeset -U path"ne conserver que la première occurrence de chaque valeur dupliquée" (à partir de man zshbuiltins). Cela signifie que cela garde votre chemin propre, même si vous sourcez successivement votre ~/.zshrc(parce que vous l'avez changé ou autre) et ne l'encombrez pas avec les mêmes valeurs encore et encore.
  • Vous pouvez utiliser path+=(/new/path)pour ajouter un nouveau répertoire à votre CHEMIN. Pour supprimer un élément, vous devez utiliser quelques astuces, voir par exemple /programming//q/3435355/2037712 ou http://www.zsh.org/mla/users//2005/msg01132.html
  • Vous pouvez facilement parcourir les éléments du CHEMIN via for i ($path) { print $i # or do something else }

Enfin, voici un extrait de ma config:

typeset -U path
path=(/new/path1
      /new/path2
      $path)
export PATH
mpy
la source
Merci, c'était en fait une question complémentaire. Je vais chercher à gérer mon chemin en utilisant pathplutôt qu'en PATH.
jordelver
1
Heureux d'entendre car je craignais déjà d'être OT. Btw. un autre avantage que j'ai oublié: vous pouvez facilement parcourir les éléments avec for i ($path) { print $i # or do something else }.
mpy