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í: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.