Esiste un'utilità per leggere le variabili di ambiente da un file env e quindi eseguire un comando (più leggero di foreman)?


16

foreman può leggere file .env e impostare variabili di ambiente dal contenuto, quindi eseguire un programma

per esempio foreman run -e vars.env myprogram

... ma fa molte altre cose (ed è principalmente interessato all'avvio delle cose usando il suo formato Procfile).

Esiste uno strumento più semplice (Linux / Unix) focalizzato sulla lettura di file .env e sull'esecuzione di un comando con il nuovo ambiente?

Esempio di file di ambiente (da http://ddollar.github.io/foreman/#ENVIRONMENT ):

FOO=bar
BAZ=qux

1
Puoi pubblicare un file .env di esempio? Ho il sospetto bash .envo sh .envpotrebbe funzionare?
Daniel Widrick,

@ IVlint67 Ho migliorato un po 'la domanda.
wodow,

Risposte:


19

È possibile eseguire il source del file di ambiente nella shell attiva ed eseguire il programma:

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

Lo -aswitch esporta tutte le variabili, in modo che siano disponibili per il programma.


3
bash -ac 'source .env && ./program'
fiatjaf,

@fiatjaf Perché dovresti usare bash in questo caso se la shell POSIX fa il lavoro e non hai bisogno di alcuna funzione che richieda effettivamente bash? Inoltre, bash non è disponibile di default su tutti i sistemi (es. FreeBSD).
Marco

Oh, giusto, ha senso, penso che la tua strada sia migliore, allora. Stavo solo fornendo l'alternativa di Bash perché mi sentivo più a mio agio a scriverlo.
fiatjaf

2

Un'altra alternativa è envdir:

envdir esegue un altro programma con l'ambiente modificato in base ai file in una directory specificata.


Questo post cita alcune caratteristiche complementari tra envdir, runite chpst; vale a dire la capacità di modificare vari aspetti si riflette nello stato del processo in esecuzione. Il post riguarda la finestra mobile ma non è limitato alla finestra mobile. blog.ghaering.de/post/docker-as-vm [archive.org: web.archive.org/web/20190321165332/https://blog.ghaering.de/… ]
driftcatcher

2

Ho provato source .enve ha funzionato come un fascino. Sfortunatamente, nessuna delle altre soluzioni pubblicate qui ha funzionato per me.


0

Questo funziona:

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

ma ovviamente non controlla la .envcorrettezza del formato del file, cosa che farebbe un programma di utilità.


1) Non catè necessario, basta scrivere tr "\\n" " " < .env2) Questo si interrompe se si utilizzano assegnazioni multilinea.
Marco,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.