
Cuando se ejecuta desde una shell un comando o un script, se crea un subproceso (proceso hijo) de la shell que ejecuta el comando o el script (proceso padre).
Si el script que ejecuta el proceso hijo crea o modifica alguna variable de entorno, esos cambios o variables desaparecen cuando finaliza el comando o script.
Si deseamos que dichos cambios permanezcan, podemos utilizar el comando de Bash source. Este comando hace que el proceso o comando se ejecute sin crear ningún proceso hijo, de forma que los cambios efectuados en las variables de entorno y demás, se mantengan al finalizar el archivo.
Veamos el uso del comando source de Bash con un ejemplo.
Tenemos creado el script ejemplo_source.sh, que contiene el siguiente código
1 2 3 4 5 | #!/bin/bash VAR_EJEMPLO_SOURCE='www.aradaen.com'; echo '$VAR_EJEMPLO_SOURCE='$VAR_EJEMPLO_SOURCE; |
Este script asigna a la variable VAR_EJEMPLO_SOURCE el valor ‘www.aradaen.com’ y muestra su valor en pantalla.
En este ejemplo vamos a mostrar el valor de la variable VAR_EJEMPLO_SOURCE antes y después de la ejecución del script de forma estándar:
1 2 3 4 5 6 7 | [usr@srv]: echo $VAR_EJEMPLO_SOURCE [usr@srv]: ejemplo_source.sh $VAR_EJEMPLO_SOURCE=www.aradaen.com [usr@srv]: echo $VAR_EJEMPLO_SOURCE [usr@srv]: |
Como vemos en el ejemplo anterior, la variable VAR_EJEMPLO_SOURCE, no existe previamente de forma que no tiene ningún valor asignado.
1 2 3 | [usr@srv]: echo $VAR_EJEMPLO_SOURCE ... |
Al ejecutar de forma estándar el script ejemplo_source.sh, se le asigna el valor a la variable, y muestra su valor.
2 3 4 5 | ... [usr@srv]: ejemplo_source.sh $VAR_EJEMPLO_SOURCE=www.aradaen.com ... |
Pero al finalizar el programa, los cambios que realiza desaparecen con el: VAR_EJEMPLO_SOURCE al finalizar la ejecución del script, sigue sin tener valor asignado
3 4 5 6 | ... [usr@srv]: echo $VAR_EJEMPLO_SOURCE [usr@srv]: |
Vamos a efectuar ahora el mismo proceso, pero utilizando el comando source para ejecutar el script ejemplo_source.sh:
1 2 3 4 5 6 7 | [usr@srv]: echo $VAR_EJEMPLO_SOURCE
[usr@srv]: source ejemplo_source.sh$VAR_EJEMPLO_SOURCE=www.aradaen.com
[usr@srv]: echo $VAR_EJEMPLO_SOURCE
www.aradaen.com
[usr@srv]: |
Inicialmente la variable $VAR_EJEMPLO_SOURCE no tiene valor.
1 2 3 | [usr@srv]: echo $VAR_EJEMPLO_SOURCE ... |
Al ejecutar el script utilizando el comando source, se asigna el valor a la variable y se muestra en pantalla
2 3 4 5 | ...
[usr@srv]: source ejemplo_source.sh$VAR_EJEMPLO_SOURCE=www.aradaen.com
... |
Pero a diferencia del ejemplo anterior, ahora, al finalizar la ejecución del script, la variable mantiene $VAR_EJEMPLO_SOURCE mantiene el valor asignado en el script:
4 5 6 7 | ... [usr@srv]: echo $VAR_EJEMPLO_SOURCE www.aradaen.com [usr@srv]: |
Como vemos, al ejecutar el script utilizando el comando source es ejecutado directamente por el mismo proceso y no con un subproceso, por lo que los cambios en variables se mantienen.
No hay artículos relacionados con el actual.