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.