Existe-t-il un moyen simple dans zsh d'ajouter un répertoire à mon PATH uniquement s'il n'est pas déjà présent? (ou, plus généralement, toute variable d'environnement). J'ai essayé:
PATH+=/my/directory
... mais si cela est exécuté deux fois, il est ajouté deux fois.
Réponses:
In
zsh
$PATH
est lié (voirtypeset -T
) au$path
tableau. Vous pouvez forcer ce tableau à avoir des valeurs uniques avec:Et puis, ajoutez le chemin avec:
Sans avoir à s'inquiéter s'il était déjà là.
Pour l'ajouter à l'avant, faites:
ou:
si
~/foo
était déjà$path
dedans, cela le déplacera vers l'avant.la source
typeset -Ug path
? Lorsque j'utilisetypeset -U path
dans mon~/.zshrc
fichier, je reçois toujours une erreur indiquant que rien ne se trouve dans le chemin pendant que zshrc est en cours d'exécution-g
est d'éviter de restreindre la portée, mais dans~/.zshrc
, la portée est déjà globale. Aussi, je n'ai jamais vu sezsh
plaindre d'un vide$PATH
(sauf pour la commande des erreurs non trouvées bien sûr).Ajoutez
export -U PATH=~/foo${PATH:+:$PATH}
à l'un de vos fichiers de démarrage. Le-U
conserve uniquement la première occurrence d'une valeur dans des tableaux ou certaines:
variables délimitées comme PATH.la source
Vous devrez faire quelque chose comme:
Cela ne fonctionne que si
newpath
est délimité par deux ':', il faut considérer les cas quand il est au début ou à la fin de manière similaire.Urgh.
la source
echo "$PATH"
: mettez toujours des guillemets doubles autour des substitutions de variables ).case ":$PATH:" in *:/new/directory:*) :;; *) PATH=$PATH:/new/directory;; esac