Czy istnieje narzędzie do odczytu zmiennych środowiskowych z pliku env, a następnie uruchom polecenie (bardziej lekkie niż majster)?


16

foreman potrafi odczytać pliki .env i ustawić zmienne środowiskowe z zawartości, a następnie uruchomić program

na przykład foreman run -e vars.env myprogram

... ale robi wiele innych rzeczy (i przede wszystkim zajmuje się uruchamianiem rzeczy w formacie Procfile).

Czy istnieje prostsze narzędzie (Linux / Unix), które koncentruje się tylko na czytaniu plików .env i wykonywaniu poleceń w nowym środowisku?

Przykładowy plik środowiska (z http://ddollar.github.io/foreman/#ENVIRONMENT ):

FOO=bar
BAZ=qux

1
Czy możesz opublikować przykładowy plik .env? Podejrzewam bash .envczy mogę sh .envpracować?
Daniel Widrick,

@ IVlint67 Poprawiłem nieco to pytanie.
wodow

Odpowiedzi:


19

Możesz pobrać plik środowiska w aktywnej powłoce i uruchomić program:

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

-aPrzełącznik eksportuje wszystkie zmienne, dzięki czemu są one dostępne w programie.


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

@fiatjaf Dlaczego miałbyś używać bash w tym przypadku, jeśli powłoka POSIX wykonuje to zadanie i nie potrzebujesz żadnej funkcji, która faktycznie wymaga bash? Ponadto bash nie jest domyślnie dostępny we wszystkich systemach (np. FreeBSD).
Marco

Och, słusznie, ma sens, więc myślę, że twoja droga jest lepsza. Właśnie zapewniłem alternatywę dla Bash, ponieważ pisanie jej było dla mnie wygodniejsze.
fiatjaf

2

Inną alternatywą jest envdir:

envdir uruchamia inny program ze środowiskiem zmodyfikowanym zgodnie z plikami w określonym katalogu.


Ten post wymienia kilka dodatkowych funkcji pomiędzy envdir, runitoraz chpst; mianowicie zdolność do zmiany zmiennych środowiska odzwierciedlają stan uruchomionego procesu. Post dotyczy dokera, ale nie ogranicza się do dokera. blog.ghaering.de/post/docker-as-vm [archive.org: web.archive.org/web/20190321165332/https://blog.ghaering.de/… ]
driftcatcher

2

Próbowałem source .envi zadziałało to jak urok. Niestety żadne z innych opublikowanych tutaj rozwiązań nie działało dla mnie.


0

To działa:

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

ale oczywiście nie sprawdza .envpoprawności formatu pliku, co zrobiłby program narzędziowy.


1) To catnie jest konieczne, po prostu napisz tr "\\n" " " < .env2) Dzieje się tak, jeśli używane są przypisania wieloliniowe.
Marco
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.