Quiero agregar, en ~ / .bashrc, algunos directorios a mi $ PATH.
Mi $ PATH es bastante largo, por lo que es un poco difícil ver qué directorios contiene y en qué orden.
Sé que puedo modificar mi ~ / .bashrc para que sea:
PATH=$PATH:/some/dir
PATH=$PATH:/another/dir:/yet/another
PATH=$PATH:/and/another
...
facilitaría la lectura. Pero me preguntaba si durante los últimos años Bash ha adquirido alguna sintaxis que facilita la especificación de una RUTA larga. Por ejemplo, fantaseo con una sintaxis similar a:
PATH=:((
/some/dir
/another/dir
/yet/another
/and/another
...
))
Yo sé como la sintaxis no es válida. Me preguntaba si hay algo tan fácil. ¿Esta ahí?
PATH=foo:$PATH
parece incorrecto porque mantiene el crecimiento todo el tiemposource ~/.bashrc
e inclusoexec bash
no puede ayudar desde el$PATH
principioexport
.Respuestas:
Utilizo un conjunto de funciones de conveniencia para anteponer o agregar una ruta a una variable. Las funciones vienen en el tarball de distribución para Bash en un archivo contrib llamado "pathfuncs".
Si especifica una variable como segundo argumento, la usará en lugar de PATH.
Por conveniencia, aquí están:
Si los agrega a su archivo de inicio de bash, puede agregarlos a su RUTA de esta manera:
O especifique una variable diferente:
Utilizo este método en mis archivos rc poniendo primero las pre_paths y las add_paths en segundo lugar. Hace que todos mis cambios de ruta sean fáciles de entender de un vistazo. Otro beneficio es que las líneas son lo suficientemente cortas como para que pueda agregar un comentario final en una línea si es necesario.
Y dado que estas son funciones, puede usarlas de forma interactiva desde la línea de comandos, como decir
add_path $(pwd)
que agregue el directorio actual a la ruta.fuente
del_path .
).Bien, descubrí la siguiente solución, que creo que es elegante (en lo que respecta a la sintaxis de shell). Utiliza la sintaxis de matriz de Bash y también una forma ordenada de unir elementos:
¡ALERTA!
Resulta que esta solución tiene un problema : a diferencia de las soluciones de @terdon y @Starfish, no comprueba primero si las rutas ya están en RUTA. Entonces, dado que quiero poner este código en ~ / .bashrc (y no en ~ / .profile), las rutas duplicadas se arrastrarán en PATH. Por lo tanto, no use esta solución (a menos que la ponga en ~ / .profile (o, mejor, ~ / .bash_profile ya que tiene una sintaxis específica de Bash)).
fuente
PATH
causar problemas de rendimiento (especialmente porque el shell almacena en caché las búsquedas exitosas).Yo uso la siguiente función en mi
~/.bashrc
. Es algo que obtuve de un administrador de sistemas en mi antiguo laboratorio, pero no creo que los haya escrito. Simplemente agregue estas líneas a su~/.profile
o~/.bashrc
:Esto tiene varias ventajas:
$PATH
es trivial:pathmunge /foo/bar
;pathmunge /foo/bar
o al final (pathmunge /foo/bar
después) del$PATH
.El archivo de inicialización de su shell contendría algo como:
fuente
grep
.eval
para que pueda causar daños graves si lo ejecuta con el argumento incorrecto.grep
, ver bugzilla.redhat.com/show_bug.cgi?id=544652#c7Quiero agregar, en ~ / .bashrc, algunos directorios a mi $ PATH.
Yo uso lo siguiente en Cygwin. Debería funcionar en otras versiones de bash. Puede eliminar el
unset PATH
para construir en su actualPATH
(si lo hace, puede que tenga que descubrir cómo agregar los:
separadores correctamente).Nota:
bash
función, pero la perdí después de un bloqueo de disco.En mi
.bash_profile
:...
En
~/.path_elements
:fuente
Lo uso en mi .bashrc (y también en mi .zshrc, ya que normalmente uso zsh donde está disponible en lugar de bash). De acuerdo, requiere que agregue directorios manualmente, pero una ventaja es que a medida que lo actualizo, puedo seguir copiándolo en nuevos servidores y no preocuparme de que la RUTA en un nuevo servidor se cree con directorios que no existen allí.
Hago lo mismo para mi MANPATH:
Además de tener un solo archivo que puedo copiar en sistemas en entornos dispares sin temor a agregar directorios no existentes a la RUTA, este enfoque también tiene la ventaja de permitirme especificar el orden en que quiero que aparezcan los directorios en la RUTA. Dado que la primera línea de cada definición redefine completamente la variable PATH, puedo actualizar mi .bashrc y obtenerlo después de la edición para actualizar mi shell sin agregar entradas duplicadas (que solía experimentar hace mucho tiempo cuando simplemente comencé con " $ PATH = $ PATH: / new / dir ". Esto garantiza que obtenga una copia limpia en el orden que deseo.
fuente
d="/usr/share/man" ; [ -d "$d" ] && MANPATH="$MANPATH:${d}"
será más corto y más fácil agregar un nuevo directorio (solo copie una línea y edite la primera parte "d = ...."). Sin embargo, para el PATH, creo que terminarás con demasiados directorios en tu PATH, lo que no siempre es bueno (¿qué pasa si existe un comando "foo" en uno de los caminos menos conocidos y haces algo completamente diferente? que lo que se esperaría de un usuario normal)?¡Hay una manera fácil! Lea las funciones de Shell y las variables de ruta en Linux Journal , 01 de marzo de 2000 Por Stephen Collyer
Las funciones me permiten usar un nuevo tipo de datos en mi entorno bash: la lista separada por dos puntos. Además de PATH, los uso para ajustar mi LOCATE_PATH, MANPATH y otros, y como un tipo de datos general en la programación de bash. Así es como configuro mi RUTA (usando las funciones):
Como el enlace de Linux Journal se conoce como "roto", puse las funciones de ruta de acceso Bash en un archivo .shar en http://pastebin.ubuntu.com/13299528/
fuente