¿Hay alguna manera de agregar un directorio a mi RUTA en zsh solo si aún no está presente?


15

¿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.


2
@uther, eso no es un duplicado ya que esa otra pregunta era para bash, mientras que esta es para zsh, que tiene su propia forma de abordar este problema.
Stéphane Chazelas

Respuestas:


32

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.


No quiere decir 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
kalbasit

@eMxyzptlk, extraño. -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).
Stéphane Chazelas

3

Agregar export -U PATH=~/foo${PATH:+:$PATH}a uno de sus archivos de inicio. El -Umantiene sólo la primera aparición de un valor en arrays o ciertas :variables de delimitados como PATH.


-3

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


1
Puede hacerlo dentro del shell, solo con las funciones Bourne / POSIX. Esto evita los dolores de cabeza entre comillas (al menos haga eso echo "$PATH": siempre ponga comillas dobles alrededor de las sustituciones variables ). case ":$PATH:" in *:/new/directory:*) :;; *) PATH=$PATH:/new/directory;; esac
Gilles 'SO- deja de ser malvado'
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.