Есть ли утилита для чтения переменных окружения из файла env и затем запуска команды (более легкой, чем мастер)?

16

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

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

... но он делает много других вещей (и в первую очередь касается запуска с использованием формата Procfile).

Есть ли более простой (Linux / Unix) инструмент, который просто фокусируется на чтении файлов .env и выполнении команды в новой среде?

Пример файла среды (из http://ddollar.github.io/foreman/#ENVIRONMENT ):

FOO=bar
BAZ=qux
wodow
источник
1
Можете ли вы опубликовать пример файла .env? Я подозреваю bash .envили sh .envможет работать?
Даниэль Видрик
@ IVlint67 Я немного улучшил вопрос.
Вдова

Ответы:

19

Вы можете получить исходный файл среды в активной оболочке и запустить программу:

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

-aПереключатель экспортирует все переменные, так что они будут доступны для программы.

Marco
источник
3
bash -ac 'source .env && ./program'
Пятница,
@fiatjaf Зачем вам использовать bash в этом случае, если оболочка POSIX выполняет свою работу, и вам не нужна функция, которая на самом деле требует bash? Кроме того, bash не доступен по умолчанию во всех системах (например, FreeBSD).
Марко
О, верно, имеет смысл, я думаю, что ваш путь лучше, тогда. Я просто предоставлял альтернативу Bash, потому что мне было удобнее писать ее.
Пятница
2

Другая альтернатива envdir:

envdir запускает другую программу со средой, измененной в соответствии с файлами в указанном каталоге.

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

Я пытался, source .envи это сработало как шарм. К сожалению, ни одно из других решений, опубликованных здесь, не помогло мне.

Shouvik
источник
0

Это работает:

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

но, очевидно, не проверяет формат .envфайла на корректность, что может сделать служебная программа.

wodow
источник
1) catНет необходимости, просто напишите tr "\\n" " " < .env2) Это прерывается, если используются многострочные назначения.
Марко