Me gustaría encontrar una forma de agregar cosas a $PATH, en todo el sistema o para un usuario individual, sin tener que agregar la misma ruta varias veces.
Una razón para querer hacer esto es que se pueden hacer adiciones en .bashrc
, que no requiere inicio de sesión y también es más útil en sistemas que usan (por ejemplo) lightdm
, que nunca llama a .profile
.
Soy consciente de las preguntas relacionadas con cómo limpiar duplicados de $PATH, pero no quiero eliminar duplicados . Me gustaría una forma de agregar rutas solo si aún no están presentes.
Respuesta aceptada:
Supongamos que la nueva ruta que queremos agregar es:
new=/opt/bin
Luego, usando cualquier shell POSIX, podemos probar para ver si new
ya está en la ruta y agréguelo si no lo está:
case ":${PATH:=$new}:" in
*:"$new":*) ;;
*) PATH="$new:$PATH" ;;
esac
Tenga en cuenta el uso de dos puntos. Sin los dos puntos, podríamos pensar que, digamos, new=/bin
ya estaba en la ruta porque el patrón coincidía con /usr/bin
. Si bien los PATH normalmente tienen muchos elementos, también se manejan los casos especiales de elementos cero y uno en el PATH. El caso de la RUTA que inicialmente no tiene elementos (estando vacía) se maneja mediante el uso de ${PATH:=$new}
que asigna PATH
a $new
si está vacío. Establecer valores predeterminados para los parámetros de esta manera es una característica de todos los shells POSIX:consulte la sección 2.6.2 de los documentos POSIX).
Una función invocable
Para mayor comodidad, el código anterior se puede poner en una función. Esta función se puede definir en la línea de comandos o, para que esté disponible de forma permanente, se puede colocar en el script de inicialización de su shell (para los usuarios de bash, sería ~/.bashrc
):
pupdate() { case ":${PATH:=$1}:" in *:"$1":*) ;; *) PATH="$1:$PATH" ;; esac; }
Para usar esta función de actualización de ruta para agregar un directorio a la RUTA actual:
pupdate /new/path