Apakah ada utilitas untuk membaca variabel lingkungan dari file env dan kemudian menjalankan perintah (lebih ringan dari mandor)?

16

foreman dapat membaca file .env dan mengatur variabel lingkungan dari konten, dan kemudian menjalankan program

misalnya foreman run -e vars.env myprogram

... tetapi ia melakukan banyak hal lain (dan terutama berkaitan dengan memulai sesuatu menggunakan format Procfile-nya).

Apakah ada alat (Linux / Unix) yang lebih sederhana yang hanya berfokus pada membaca file .env dan menjalankan perintah dengan lingkungan baru?

Contoh file lingkungan (dari http://ddollar.github.io/foreman/#ENVIRONMENT ):

FOO=bar
BAZ=qux
wodow
sumber
1
Bisakah Anda memposting contoh file .env? Saya curiga bash .envatau sh .envdapat bekerja?
Daniel Widrick
@ IVlint67 Saya sudah sedikit meningkatkan pertanyaan.
wodow

Jawaban:

19

Anda dapat sumber file lingkungan di shell aktif dan menjalankan program:

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

The -aberalih ekspor semua variabel, sehingga mereka tersedia untuk program ini.

Marco
sumber
3
bash -ac 'source .env && ./program'
fiatjaf
@fiatjaf Mengapa Anda menggunakan bash dalam kasus ini jika shell POSIX berfungsi dan Anda tidak memerlukan fitur yang sebenarnya membutuhkan bash? Selain itu, bash tidak tersedia secara default di semua sistem (mis. FreeBSD).
Marco
Oh, benar, masuk akal, saya pikir jalan Anda lebih baik, kalau begitu. Saya hanya menyediakan alternatif Bash karena saya merasa lebih nyaman menulisnya.
fiatjaf
2

Alternatif lain adalah envdir:

envdir menjalankan program lain dengan lingkungan yang dimodifikasi sesuai dengan file dalam direktori yang ditentukan.

wodow
sumber
Posting ini menyebutkan beberapa fitur pelengkap antara envdir, runitdan chpst; yaitu kemampuan untuk berubah dan mencerminkan keadaan proses yang sedang dijalankan. Posting ini tentang buruh pelabuhan tetapi tidak terbatas pada buruh pelabuhan. blog.ghaering.de/post/docker-as-vm [archive.org: web.archive.org/web/20190321165332/https://blog.ghaering.de/… ]
driftcatcher
2

Saya mencoba source .envdan itu bekerja seperti pesona. Sayangnya, tidak ada solusi lain yang diposting di sini yang berfungsi untuk saya.

Shouvik
sumber
0

Ini bekerja:

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

tetapi jelas tidak memeriksa format .envfile untuk kebenaran, yang akan dilakukan oleh program utilitas.

wodow
sumber
1) Tidak catperlu, hanya menulis tr "\\n" " " < .env2) Ini rusak jika tugas multi-line digunakan.
Marco