¿Existe una utilidad para leer las variables de entorno de un archivo env y luego ejecutar un comando (más ligero que el capataz)?

16

foreman puede leer archivos .env y establecer variables de entorno a partir del contenido, y luego ejecutar un programa

p.ej foreman run -e vars.env myprogram

... pero hace muchas otras cosas (y se preocupa principalmente por comenzar cosas usando su formato Procfile).

¿Existe una herramienta más simple (Linux / Unix) que solo se centre en leer archivos .env y ejecutar un comando con el nuevo entorno?

Archivo de entorno de ejemplo (de http://ddollar.github.io/foreman/#ENVIRONMENT ):

FOO=bar
BAZ=qux
wodow
fuente
1
¿Puedes publicar un archivo .env de ejemplo? Sospecho bash .envo sh .envpuedo trabajar?
Daniel Widrick
@ IVlint67 He mejorado un poco la pregunta.
wodow

Respuestas:

19

Puede obtener el archivo de entorno en el shell activo y ejecutar el programa:

sh -ac ' . ./.env; /usr/local/bin/someprogram'

El -aconmutador exporta todas las variables, de modo que estén disponibles para el programa.

Marco
fuente
3
bash -ac 'source .env && ./program'
fiatjaf
@fiatjaf ¿Por qué usaría bash en este caso si el shell POSIX hace el trabajo y no necesita ninguna función que realmente requiera bash? Además, bash no está disponible por defecto en todos los sistemas (por ejemplo, FreeBSD).
Marco
Ah, claro, tiene sentido, creo que tu camino es mejor, entonces. Solo estaba proporcionando la alternativa Bash porque me sentí más cómoda escribiéndola.
fiatjaf
2

Otra alternativa es envdir:

envdir ejecuta otro programa con un entorno modificado de acuerdo con los archivos en un directorio especificado.

wodow
fuente
Este post menciona algunas de las características complementarias entre envdir, runity chpst; a saber, la capacidad de cambiar los entornos se refleja en el estado del proceso que se ejecuta. La publicación es sobre Docker, pero no se limita a Docker. blog.ghaering.de/post/docker-as-vm [archive.org: web.archive.org/web/20190321165332/https://blog.ghaering.de/… ]
driftcatcher
2

Lo intenté source .envy funcionó a las mil maravillas. Desafortunadamente, ninguna de las otras soluciones publicadas aquí funcionó para mí.

Shouvik
fuente
0

Esto funciona:

env $(cat .env | tr "\\n" " ") myprogram

pero obviamente no verifica que el formato del .envarchivo sea correcto, lo que haría un programa de utilidad.

wodow
fuente
1) No cates necesario, solo escriba tr "\\n" " " < .env2) Esto se rompe si se utilizan asignaciones de varias líneas.
Marco