Gibt es ein Dienstprogramm zum Lesen von Umgebungsvariablen aus einer env-Datei und zum Ausführen eines Befehls (kompakter als Foreman)?

16

foreman kann .env-Dateien lesen und Umgebungsvariablen aus dem Inhalt festlegen und dann ein Programm ausführen

z.B foreman run -e vars.env myprogram

... aber es macht eine Menge anderer Dinge (und befasst sich hauptsächlich mit dem Starten von Dingen unter Verwendung des Procfile-Formats).

Gibt es ein einfacheres Tool (Linux / Unix), das sich nur darauf konzentriert, ENV-Dateien zu lesen und einen Befehl in der neuen Umgebung auszuführen?

Beispiel für eine Umgebungsdatei (von http://ddollar.github.io/foreman/#ENVIRONMENT ):

FOO=bar
BAZ=qux
wodow
quelle
1
Können Sie eine .env-Beispieldatei posten? Ich vermute bash .envoder sh .envkann arbeiten?
Daniel Widrick
@ Ivlint67 Ich habe die Frage ein wenig verbessert.
Wodow

Antworten:

19

Sie können die Umgebungsdatei in der aktiven Shell als Quelle angeben und das Programm ausführen:

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

Der -aSchalter exportiert alle Variablen, so dass sie dem Programm zur Verfügung stehen.

Marco
quelle
3
bash -ac 'source .env && ./program'
Fiatjaf
@fiatjaf Warum sollten Sie in diesem Fall bash verwenden, wenn die POSIX-Shell die Aufgabe übernimmt und Sie keine Funktion benötigen, die tatsächlich bash erfordert? Außerdem ist bash nicht auf allen Systemen standardmäßig verfügbar (zB FreeBSD).
Marco
Oh, richtig, macht Sinn, ich denke, dein Weg ist dann besser. Ich habe nur die Bash-Alternative angeboten, weil ich mich wohler fühlte, sie zu schreiben.
Fiatjaf
2

Eine andere Alternative ist envdir:

envdir führt ein anderes Programm mit einer Umgebung aus, die entsprechend den Dateien in einem angegebenen Verzeichnis geändert wurde.

wodow
quelle
Dieser Beitrag erwähnt einige ergänzende Funktionen zwischen envdir, runitund chpst; Die Fähigkeit, Umgebungsvariablen zu ändern, spiegelt sich im Status des ausgeführten Prozesses wider. Der Beitrag handelt von Docker, ist aber nicht auf Docker beschränkt. blog.ghaering.de/post/docker-as-vm [archive.org: web.archive.org/web/20190321165332/https://blog.ghaering.de/… ]
Driftcatcher
2

Ich habe es versucht source .envund es hat wie ein Zauber funktioniert. Leider hat keine der anderen hier veröffentlichten Lösungen für mich funktioniert.

Shouvik
quelle
0

Das funktioniert:

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

prüft aber offensichtlich nicht das Format der .envDatei auf Richtigkeit, was ein Hilfsprogramm tun würde.

wodow
quelle
1) Das catist nicht nötig, schreibe einfach tr "\\n" " " < .env2) Dies bricht ab, wenn mehrzeilige Zuordnungen verwendet werden.
Marco