¿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

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.


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.


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


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.


1) No cates necesario, solo escriba tr "\\n" " " < .env2) Esto se rompe si se utilizan asignaciones de varias líneas.
— Marco
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.