Modifico mi .bashrc con frecuencia y luego lo obtengo. Sin embargo, cuando tengo cosas como
export PATH="~/bin:~/perl5/bin:$PATH"
en mi archivo, la PATH
variable de entorno crece cada vez que obtengo el archivo.
Por ejemplo, la primera vez que se obtiene .bashrc, la PATH
variable consiste en ~/bin:~/perl5/bin:/usr/bin:/bin
.
La segunda vez que consiste ~/bin:~/perl5/bin:~/bin:~/perl5/bin:/usr/bin:/bin
.
La tercera vez que consiste ~/bin:~/perl5/bin:~/bin:~/perl5/bin:~/bin:~/perl5/bin:/usr/bin:/bin
.
¿Hay una manera simple de hacer que solo agregue algo que no esté ya en la RUTA?
/etc/profile
Debian Lenny, así que lo incluyo en mi.bashrc
.pathmunge /some/path
se colocará/some/path
al principio de$PATH
ypathmunge /some/path after
se colocará/some/path
al final de$PATH
if ! [[ $PATH =~ (^|:)$1($|:) ]] ; then
.pathmunge /foo before
no logra eso. Una mejor manera sería agregar / foo al principio y luego eliminar los duplicados después.Estaba teniendo este problema, así que usé una combinación de técnicas enumeradas en la pregunta de StackOverflow . Lo siguiente es lo que solía deducir la variable PATH real que ya se había establecido, ya que no quería modificar el script base.
Siempre podría optimizar esto un poco más, pero tenía un código adicional en mi original para mostrar lo que estaba sucediendo para asegurarme de que estaba configurando correctamente las variables. La otra cosa a tener en cuenta es que realizo lo siguiente
Esto es para garantizar que pueda manejar directorios con espacios en (¡los directorios de inicio de Samba con nombres de usuario de Active Directory pueden tener espacios!)
fuente
/bin
si hay otras entradas como/usr/bin
porque la expresión regular coincide aunque las dos entradas no sean iguales!Establece tu camino explícitamente.
fuente
PATH
no siempre es el mismo.Solo una cadena:
fuente
$PATH
. Me gusta poner directorios específicos al principio de$PATH
(like/home/username
) para que mis copias personales de ejecutables se ejecuten en lugar de los valores predeterminados incorporados.Se me ocurren dos formas diferentes de resolver esto. El primero, es iniciar su .bashrc con una línea que establezca explícitamente su RUTA base, de esa manera cada vez que la obtiene, se restablece a la base antes de agregar directorios adicionales.
Por ejemplo, agregue:
Alternativamente, puede verificar un elemento antes de agregarlo a la ruta. Para hacer eso, usarías algo como:
Sin embargo, este último tiende a ser un poco repetitivo si agrega muchas entradas, por lo que tiendo a seguir con el primero. Si desea usar esto y planea agregar muchas entradas, sería aconsejable escribir una función bash para manejarlo.
Nota: La segunda opción solo puede funcionar como está escrita en las versiones modernas de bash. El soporte de expresiones regulares no es una característica de Bourne Shell (/ bin / sh) y puede no existir en otros shells. Además, el uso de comillas puede no ser necesario o incluso puede causar problemas en algunas versiones más recientes de bash.
fuente
PATH
no siempre es el mismo.if
. Además, es sorprendentemente (para mí) fácil convertir esto en una función que recorre los argumentos separados por espacios, por lo que puede decir:add_to_PATH ~/perl5/bin ~/.bin
unix.stackexchange.com/a/4973/28760 (supongo que lacase
declaración utilizada allí es más portátil , pero tuif
es más claro para mí). ¡EDITE una extraña coincidencia de que esa pregunta también agregue perl5!Aquí está mi solución:
PATH=$(echo -n $PATH | awk -v RS=: -v ORS=: '!x[$0]++' | sed "s/\(.*\).\{1\}/\1/")
Un lindo y sencillo revestimiento que no deja rastro:
fuente