PATH

goddamnhippie edited this page Dec 4, 2011 · 6 revisions

Cuando abres una terminal en realidad estás ejecutando un SHELL. El SHELL se parece en muchos aspectos a un ambiente de programación, donde se pueden establecer variables, ejecutar comandos, evaluar condicionales y loops, etc. Una variable muy importante es $PATH.

La mayoría de ejecutables de tu sistema se encuentran en las rutas /bin, /sbin, /usr/bin y /usr/sbin. Por convención los ejecutables que tu vas a instalar se ponen en /usr/local/bin y en /usr/local/sbin. (Aunque en realidad pueden ir en cualquier parte.)

Cuando estés en la terminal siempre considera que puedes llegar a los recursos (archivos, carpetas y ejecutables) mediante su ruta completa o su ruta relativa a tu ubicación en el sistema de archivos (filesystem). Siempre puedes ejecutar un comando poniendo la ruta completa, por ejemplo /bin/date o /bin/hostname. Pero normalmente vas a ejecutar el comando solo, por ejemplo date o hostname. Ruby se ejecuta de la misma manera. Pero…

¿Que pasa si tienes dos ejecutables que se llaman igual? ¿Como sabe el sistema cual ejecutar?

Precisamente para eso existe la variable $PATH, que establece el orden de búsqueda del comando (en que carpetas buscarlo primero). Si quieres saber la ruta exacta de un comando, la puedes averiguar con el comando which. Por ejemplo, ejecuta which cd y el resultado seguramente será /usr/bin/cd (pero depende de tu SO).

Para modificar la variable, lo que debes hacer es modificar el archivo .bash_profile ubicado en tu home folder. Este archivo se ejecuta cuando abres una terminal. Por lo general este archivo no se ve en la interfase gráfica.

Puedes editar el archivo con nano que es un editor de texto básico y fácil de usar, y además viene pre-instalador en Ubuntu y Mac OS X. Se edita de esta manera:

$ nano ~/.bash_login

Este comando va a abrir un editor, con eso agrega esta línea:

export PATH="/usr/local/bin:/usr/local/sbin:$PATH"

Esta línea hace que se busque el comando en las carpetas /usr/local/bin y /usr/local/sbin antes que las otras definidas en la variable $PATH (por lo general /bin, /usr/bin, etc). Con eso logras que los ejecutables que tu compiles en /usr/local (como nuevas versiones de Ruby) sean ejecutadas antes que las que puedan venir pre-instaladas en el sistema.