Pregunta:
¿Alguien ha escrito una función bash para agregar un directorio a $ PATH solo si aún no está allí?
Normalmente agrego a PATH usando algo como:
export PATH=/usr/local/mysql/bin:$PATH
Si construyo mi PATH en .bash_profile, entonces no se lee a menos que la sesión en la que estoy sea una sesión de inicio de sesión, lo cual no siempre es cierto. Si construyo mi PATH en .bashrc, se ejecuta con cada subcapa. Entonces, si abro una ventana de Terminal y luego ejecuto la pantalla y luego ejecuto un script de shell, obtengo:
$ echo $PATH
/usr/local/mysql/bin:/usr/local/mysql/bin:/usr/local/mysql/bin:....
Voy a intentar construir una función bash llamada add_to_path()
que solo agrega el directorio si no está allí. Pero, si alguien ya ha escrito (o encontrado) algo así, no perderé el tiempo en ello.
Respuesta:
Desde mi .bashrc:
pathadd() {
if [ -d "$1" ] && [[ ":$PATH:" != *":$1:"* ]]; then
PATH="${PATH:+"$PATH:"}$1"
fi
}
Tenga en cuenta que PATH ya debería estar marcado como exportado, por lo que no es necesario volver a exportarlo. Esto verifica si el directorio existe y es un directorio antes de agregarlo, lo que puede que no le importe.
Además, esto agrega el nuevo directorio al final de la ruta; para poner al principio, use PATH="$1${PATH:+":$PATH"}"
lugar de la línea PATH=
anterior.