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

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.


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.


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.


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.


1) Das catist nicht nötig, schreibe einfach tr "\\n" " " < .env2) Dies bricht ab, wenn mehrzeilige Zuordnungen verwendet werden.
— Marco
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.