viernes, 23 de diciembre de 2016

Localización del archivo de script

Con los permisos establecidos, ahora podemos ejecutar nuestro script:

[me@linuxbox ~]$ ./hello_world
Hello World!

Para que el script funcione, debemos preceder el nombre del script con una ruta específica. Si no lo hacemos, obtenemos esto:

[me@linuxbox ~]$ hello_world
bash: hello_world: command not found

¿Qué es esto? ¿Qué hace que nuestro script sea diferente de otros programas? Al parecer, nada. Nuestro script está perfecto. El problema es su localización. En el capítulo 11, vimos la variable de entorno PATH y su efecto en cómo busca el sistema los programas ejecutables. Para abreviar, el sistema busca en una lista de directorios cada vez que necesita encontrar un programa ejecutable, si no se especifica una ruta concreta. Así es como el sistema sabe que tiene que ejecutar /bin/ls cuando escribimos ls en la línea de comandos. El directorio /bin es uno de los directorios donde el sistema busca automáticamente. La lista de directorios está contenida en una variable de entorno llamada PATH. La variable PATH contiene una lista de directorios separados por dos puntos donde buscar. Podemos ver el contenido de PATH:

[me@linuxbox ~]$ echo $PATH
/home/me/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games

Aquí vemos nuestra lista de directorios. Si nuestro script estuviera localizado en cualquiera de los directorios de la lista, nuestro problema estaría solucionado. Fíjate en el primer directorio de la lista, /home/me/bin. La mayoría de las distribuciones Linux configuran la variable PATH para contener un directorio bin en el directorio home del usuario, para permitir a los usuarios ejecutar sus propios programas. Así que si creamos el directorio bin y colocamos nuestro script en él, debería comenzar a funcionar como otros programas:

[me@linuxbox ~]$ mkdir bin
[me@linuxbox ~]$ mv hello_world bin
[me@linuxbox ~]$ hello_world
Hello World!

Y así lo hace.

Si la variable PATH no contiene el directorio, podemos añadirlo fácilmente incluyendo esta línea en nuestro archivo .bashrc:

export PATH=~/bin:"$PATH"

Después de hacer este cambio, tendrá efecto en cada nueva sesión de terminal. Para aplicar el cambio a la sesión de terminal actual, tenemos que hacer que el shell relea el archivo .bashrc. Esto puede hacerse mediante el comando source:

[me@linuxbox ~]$ . .bashrc

El comando punto ( . ) es un sinónimo del comando source, un shell builtin que lee un archivo específico de comandos de shell y lo trata como entrada del teclado.

Nota: Ubuntu añade automáticamente el directorio ~/bin a la variable PATH si el directorio ~/bin existe cuando el archivo .bashrc del usuario se ejecute. Así que, en sistemas Ubuntu, si creamos el directorio ~/bin y luego salimos y volvemos a entrar, todo funciona.

No hay comentarios:

Publicar un comentario