¿Qué es PATH?
Cuando en Mac abres un terminal, puedes ejecutar una serie de comandos como ‘pwd‘ -para mostrar la ruta absoluta del directorio en el que te encuentras- o ‘ls‘ -que muestra los ficheros y directorios incluidos en el mismo- independientemente del directorio donde estes y donde se encuentren dichos comandos. Eso es posible gracias a PATH.
PATH es una variable de entorno que permite definir las rutas en las que el sistema operativo buscará esos comandos o ficheros.
El contenido de PATH
Para saber el valor actual de la variable PATH, debemos escribir en el terminal
echo $PATH
El valor de PATH siempre son un conjunto de rutas a directorios o ficheros separados por dos puntos. Por ejemplo, la variable PATH con valor ‘/usr/bin:/bin:/usr/sbin‘ está incluyendo los directorios /usr/bin, /bin y /usr/sbin.
Incluyendo el directorio actual en PATH
Es posible que deseemos modificar el valor de PATH, por ejemplo, [highlight]para incluir el directorio actual[/highlight]. Si no lo hacemos, no podremos ejecutar ningún comando ni abrir ningún fichero del directorio en el que estemos si este no está incluido en PATH.
Por ejemplo, si estamos en el directorio /Users/david/development/Tomcat/bin y, dentro del mismo, existe un fichero ‘startup.sh‘, al intentar ejecutar el comando
startup.sh
obtendremos un error de ‘Fichero no encontrado’ porque el sistema operativo no sabrá donde buscar el fichero ‘startup.sh‘. Por eso debemos indicarle que está en el directorio actual de trabajo, representado por un punto (.)
./startup.sh
Para evitar tener que usar el punto cada vez que queremos trabajar con un fichero de nuestro directorio actual de trabajo, debemos modificar el valor de PATH para que incluya al mismo.
Como modificar el valor de PATH
El valor de PATH, al igual que el de todas las variables de entorno, se modifica con la sintaxis
NOMBRE_DE_VARIABLE=valor
De tal manera que, para modificar la variable PATH para que incluya el directorio actual deberíamos escribir lo siguiente en el terminal
PATH=$PATH:.
Con esto, le hemos dado a PATH el valor actual ($PATH) y, además, la ruta del directorio actual (.), separándola de la anterior con dos puntos (:).
El problema es que, esta configuración se perderá en cuanto cerremos el terminal. Si quieres saber como modificar el valor de PATH de forma persistente, tendrás que aprender como el sistema operativo OS X compone el valor de PATH.
Como se obtiene el valor de PATH en OS X
En OS X, al iniciar una Terminal se ejecuta el archivo /etc/profile. Así, si escribiéramos al final del mismo la famosa linea
PATH=$PATH:.
conseguiríamos añadir el directorio actual al contenido de PATH, pero lo haríamos de una forma poco elegante -porque ese no es el lugar más adecuado para hacerlo- y seguiríamos sin entender como se compone el valor de PATH en OS X.
El mismo fichero /etc/profile lanza un programa de utilidad llamado path_helper. Este programa es el que determina como se compondrá el valor de PATH:
- Primero, añade las rutas que encuentra en el fichero /etc/paths. En dicho fichero podrías añadir más rutas, una en cada linea, sin tener que separarlas por (:). Esto modificaría PATH para todos los usuarios del sistema.
- Después, carga todas las rutas, una por linea, que encuentre en los ficheros del directorio /etc/paths.d. Este directorio permite configurar PATH modularmente. Así por ejemplo, Atlassian recomienda crearse aquí un fichero llamado ‘atlassian‘ para añadir las rutas de su SDK. Los ficheros se cargan por orden alfabético (se añadirán primero las rutas de ’50-X11’ que de ‘atlassian’). Esta opción, también modifica PATH para todos los usuarios del sistema.
- Por último, puedes crear un fichero ].profile en tu directorio HOME -en el que se inicia la terminal- y definir en el mismo el valor de PATH con la sintaxis que ya hemos definido. Esta opción, sólo modifica PATH para el usuario cuyo directorio HOME contenga el fichero .profile [no_highlight background_color=»» color=»»]UPDATE (08/JUN/2016): con OS X El Capitán, me ha dejado de funcionar el .profile y he tenido que utilizar el fichero .bash_profile, situado en el mismo directorio[/no_highlight]
Saber como funciona path_helper no solo nos ayudará a configurar el valor de la variable PATH, sino que además nos permitirá conocer porque unos directorios aparecen antes que otros y resolver los conflictos de rutas que podamos tener.
La gestión del directorio actual por comandos que ya están en el PATH
Gracias a la contribución de Dani Lopez, Victor Martinez y David Martinez, completo la información del artículo:
Cuando se usan comandos del tipo open, vi, sh, etc… no es necesario incluir los ficheros del directorio actual en el PATH puesto que estos comandos ya gestionan por si solos esa salvedad.
Es decir, si se ejecuta un open facturas.pdf, el propio comando open intenta abrir el fichero y, si no lo encuentra, vuelve a intentarlo clavándole a fuego un ./ por delante para comprobar si está en el directorio actual.