¿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
$PATH
está vinculado (ver typeset -T
) a la $path
matriz. 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 ~/foo
ya estaba en $path
eso lo moverá al frente.
typeset -Ug path
? Cuando lo uso typeset -U path
en mi ~/.zshrc
archivo, siempre recibo un error acerca de que no hay nada en el camino mientras se ejecuta zshrc
-g
es para evitar restringir el alcance, pero en ~/.zshrc
, el alcance ya es global. Además, nunca he visto zsh
quejarse 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 newpath
está 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