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?


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.


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

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
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.