Cargar variables de entorno en un script bash desde un .env con set -/+ allexport

 Hoy artículo dominguero 😙

En uno de mis vídeos, de mi serie sobre DevSecOps, te conté lo importante que es mantener tus secretos lo más a salvo posible, además de compartirte un par de plugins que te ayudarán a lograrlo:

También te conté cómo puedes evitar que se te escapen en un commit, gracias a los pre-commit hooks:

Hoy, mientras preparo mis scripts varios, quiero compartir contigo cómo puedes cargar tus secretos en un script en bash usando un .env, para evitar así hardcodear los mismos en el propio archivo.

Variables de entorno de ejemplo

Para este ejemplo tengo un .env con un par de secretos:

SNYK_TOKEN=<MY_API_TOKEN>
DB_PWD=<MY_DB_PASSWORD>

Set +/-o allexport

Ahora, para poder cargar el .env solo necesito esta línea:

set -o allexport; source .env; set +o allexport

Primero, el comando set -o allexport activa la opción allexport, lo que significa que todas las variables definidas a partir de este punto se exportarán automáticamente a los subprocesos del shell. Luego, el comando source .env carga las variables de entorno desde el archivo .env en el script actual. Finalmente, el comando set +o allexport desactiva la opción allexport, lo que significa que las variables definidas después de este punto ya no se exportarán automáticamente a los subprocesos del shell.

¿Y qué significa «los subprocesos del shell»?

Los subprocesos del shell son procesos secundarios que se ejecutan dentro del shell principal. Cuando se exportan variables de entorno a los subprocesos del shell, significa que estas variables estarán disponibles para cualquier comando o script que se ejecute dentro de ese subproceso.

Por ejemplo, si un script principal define una variable de entorno y luego llama a un script secundario, el script secundario podrá acceder a esa variable de entorno si se ha exportado correctamente al subproceso del shell.

¡Saludos!