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.