Чи є утиліта для зчитування змінних оточуючих середовищ з env-файлу, а потім виконання команди (легше, ніж бригадир)?


16

foreman може читати .env файли та встановлювати змінні середовища із вмісту, а потім запускати програму

напр foreman run -e vars.env myprogram

... але це робить багато інших речей (і в першу чергу стосується запуску речей, використовуючи його формат Procfile).

Чи є простіший інструмент (Linux / Unix), який зосереджений лише на читанні файлів .env та виконанні команди з новим середовищем?

Приклад файлу середовища (від http://ddollar.github.io/foreman/#ENVIRONMENT ):

FOO=bar
BAZ=qux

1
Чи можете ви розмістити приклад .env-файлу? Я підозрюю bash .envчи sh .envможе працювати?
Даніель Відрік

@ IVlint67 Я трохи покращив питання.
вдови

Відповіді:


19

Ви можете джерелом файлу середовища в активній оболонці та запустити програму:

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

-aПеремикач експортує всі змінні, так що вони будуть доступні для програми.


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

@fiatjaf Навіщо ви використовуєте bash в цьому випадку, якщо оболонка POSIX виконує цю роботу, і вам не потрібна функція, яка насправді вимагає bash? Крім того, bash доступний за замовчуванням у всіх системах (наприклад, FreeBSD).
Марко

О, так, має сенс, я думаю, ваш шлях тоді кращий. Я просто пропонував альтернативу Башу, тому що мені було зручніше писати її.
фіатхаф

2

Ще одна альтернатива envdir:

envdir запускає іншу програму із середовищем, зміненим відповідно до файлів у визначеному каталозі.


Це повідомлення згадує деякі додаткові функції між envdir, runitі chpst; а саме здатність змінити оточення відображає стан запущеного процесу. Повідомлення про docker, але воно не обмежується docker. blog.ghaering.de/post/docker-as-vm [archive.org: web.archive.org/web/20190321165332/https://blog.ghaering.de/… ]
driftcatcher

2

Я спробував, source .envі це спрацювало як шарм. На жаль, жодне з інших розміщених тут рішень не працювало на мене.


0

Це працює:

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

але, очевидно, не перевіряє формат .envфайлу на правильність, що робила б утиліта.


1) catНе потрібно, просто напишіть tr "\\n" " " < .env2) Це припиняється, якщо використовуються багаторядкові завдання.
Марко
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.