$PATH vs. $chemin

Sep 06 2020

Je ne me souviens pas pourquoi, mais il y a longtemps, j'ai trouvé que pour une raison quelconque, j'avais besoin de définir ces deux variables. Cela n'a posé aucun problème dans bash, mais maintenant dans zsh, quand j'ai mis

export PATH=~/bin:/opt/local/bin:/opt/local/sbin:$PATH export path=$PATH

(la même chose que j'ai utilisée dans .bashrc) dans mon initialisation, j'obtiens

/Users/…/.zshenv:export:7: path: inconsistent type for assignment

Que signifient-ils par «type» et à quoi sert $ path?

Réponses

8 grg Sep 06 2020 at 04:09

L'erreur mentionnant «type» fait référence au type de données de la variable, tel qu'une chaîne ou un tableau.

$PATHest une chaîne, $pathest un tableau. Vous ne pouvez pas affecter une chaîne, que ce soit par variable ou par littéral, à une variable typée pour contenir un tableau, car les types ne correspondent pas.

Quant à la différence entre les deux variables: elles sont censées représenter la même liste de dossiers, mais dans des formats différents. $PATHcontenant /path/to/one:/path/to/twosignifierait que $pathle premier élément de est /path/to/oneet le second est /path/to/two.

Vous ne devriez pas avoir besoin de gérer les deux variables (et l'assignation de l'une à l'autre ne fonctionnera pas car les types ne correspondent pas) - le shell devrait le gérer pour vous. Ajoutez simplement à la $PATHchaîne et le chemin que vous ajoutez devrait exister en tant qu'élément de $path.

Cela s'applique uniquement dans zsh, hérité de *csh. Vous pouvez voir la «liaison» entre les deux variables avec typeset -p PATH.

$path être un tableau est vraiment pratique:

  • l'ajout et la modification du chemin peuvent être effectués avec des opérations de tableau comme l'ajout plutôt que la manipulation de chaînes (nécessitant un fractionnement et une jointure dans le cas d'une édition quelque part au milieu).

  • le bouclage est juste for i ($path) { … }sans avoir à gérer le réglage du bon caractère fractionné.

3 fd0 Sep 06 2020 at 04:04

PATH est une valeur scalaire - une chaîne continue de chemins de recherche séparés par des deux points et path est un tableau de chemins de recherche. zshsynchronisera le chemin et le PATH. Il n'est pas nécessaire que vous le fassiez.