miércoles, 8 de abril de 2015

Para qué sirve el comando "source"

Primero que nada, hace muchísimo que no escribía en el blog!

Hoy he descubierto una herramienta nueva para el quehacer de cada día: SOURCE

Si uno busca en el man de su GNU Linux preferido, se dará cuenta que no existe una entrada para éste comando.


Esto es porque source es un comando interno (o built-in) de bash.

Básicamente source <archivo> ejecuta el archivo <archivo> línea por línea en la consola.
"¡Pero oye Miguel, eso ya se podia hacer sin el sourcce!"
Exacto, si nuestro script se encuentra guardado en alguna ubicación dentro del $PATH, podemos ejecutar el <archivo> directamente así:


o así (si nuestro script NO esta en el path):


Utilizando SOURCE sería de esta menera:



A simple vista SOURCE no difiere en absoluto a ejecutar de forma convencional un script...
...La diferencia esta en los pequeños detalles...
El único detalle es que usando SOURCE, el script se ejecutará en la consola actual (mismo proceso) y una vez que retorne, los cambios que se hicieron a las variables de entorno se mantendrán.

Recordemos como se ejecuta un script de la forma convencional: Se produce un fork del proceso init y se le asigna un PID. Se ejecuta todo el script y "retorna", osea devuelve un valor. El proceso muere y volvemos al proceso que lo invocó (la shell). Bajo estas condiciones, cualquier cambio que se realice a las variables de entorno se perderá cuando finalice el proceso.

Ejemplo:

Téngase en consideración el siguiente script, al cual llamaremos dimeTu_PID.sh:
Nota: Recordar darle permisos para ejecución!


Ahora lo ejecutaremos de ambas maneras:


Los resultados están a la vista: Utilizando SOURCE, estamos haciendo uso del mismo proceso que lo invocó, en cambio al usar "./dimeTu_PID.sh" se crea un proceso diferente y se destruye a su finalización.


4 comentarios: