En cada sistema operativo hay una forma de configurar variables que estarán disponibles a nivel global. En Linux, y para el caso de los scripts que se escriben en Bash, se puede acceder a las variables de entorno que se hayan configurado previamente.
Las variables de entorno se pueden crear de varias formas. Se pueden colocar en el archivo .profile
, .bash_profile
, o antes de ejecutar un comando al declarar la variable antes del comando, ejemplo:
$ RAILS_ENV=production rake assets:precompile
Puede que la variable de entorno RAILS_ENV
no esté definida al momento de ejecutar el comando pero cuando se definir al ejecutar el comando, estará disponible durante la ejecución del mismo.
Cuando se escriben scripts en Bash, sea para automatizar tareas, para complementar los despliegues de un software o por lo que sea, usar variables de entorno puede ocurrir de manera que se lean las ya definidas en el sistema o agregar nuevas.
Cuando se agregan nuevas variables, y dado el caso(como me pasó a mí), puede que llegue a haber muchas, lo que termina ensuciando el script con definición de variables.
Para dejar el script limpio se puede optar por crear un archivo que contenga las variables(sino están en los mencionados anteriormente) y cargarlas desde este. De la siguiente forma:
# archivo_con_vars
ENV_VAR_1=hola
ENV_VAR_2=mund
Mi primera equivocación fue pensar que se podían importar esas variables leyendo el archivo y de una u otra forma definir las variables dentro del script pero así no funcionaba. En realidad la forma correcta es bastante sencilla.
La forma correcta consiste en cargar el archivo en el inicio del script. Al cargarlo hará que estén disponibles solo mientras se ejecuta el mismo. Se logra así:
# script.sh
#!/bin/bash
source ./archivo_con_var
# código del script…
En vez de source
también se puede usar la notación con un punto: . ./archivo_con_var
y pasará lo mismo. De estas dos formas se puede importar variables de entorno en un script en Bash desde un archivo separado.