¿Hay una manera fácil en zsh de agregar un directorio a mi RUTA solo si aún no está presente? (o, más generalmente, cualquier variable de entorno). He intentado:
PATH+=/my/directory
... pero si se ejecuta dos veces, se agrega dos veces.
¿Hay una manera fácil en zsh de agregar un directorio a mi RUTA solo si aún no está presente? (o, más generalmente, cualquier variable de entorno). He intentado:
PATH+=/my/directory
... pero si se ejecuta dos veces, se agrega dos veces.
Respuestas:
In zsh $PATHestá vinculado (ver typeset -T) a la $pathmatriz. Puede forzar que esa matriz tenga valores únicos con:
typeset -U path
Y luego, agregue la ruta con:
path+=(~/foo)
Sin tener que preocuparse si ya estaba allí.
Para agregarlo al frente, haga:
path=(~/foo "$path[@]")
o:
path[1,0]=~/foo
si ~/fooya estaba en $patheso lo moverá al frente.
typeset -Ug path? Cuando lo uso typeset -U pathen mi ~/.zshrcarchivo, siempre recibo un error acerca de que no hay nada en el camino mientras se ejecuta zshrc
-ges para evitar restringir el alcance, pero en ~/.zshrc, el alcance ya es global. Además, nunca he visto zshquejarse de un vacío $PATH(a excepción de los errores de comando no encontrado, por supuesto).
Tendrás que hacer algo como:
if echo $PATH | grep :newpath: ; then doIfPresent; else doIfMissing; fi
Esto funciona solo si newpathestá delimitado por dos ':', necesita considerar los casos cuando está al principio o al final de manera similar.
Urgh
echo "$PATH": siempre ponga comillas dobles alrededor de las sustituciones variables ). case ":$PATH:" in *:/new/directory:*) :;; *) PATH=$PATH:/new/directory;; esac