Есть ли утилита для чтения переменных окружения из файла 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 Зачем вам использовать bash в этом случае, если оболочка POSIX выполняет свою работу, и вам не нужна функция, которая на самом деле требует bash? Кроме того, bash не доступен по умолчанию во всех системах (например, FreeBSD).
Марко

О, верно, имеет смысл, я думаю, что ваш путь лучше, тогда. Я просто предоставлял альтернативу Bash, потому что мне было удобнее писать ее.
Пятница

2

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

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


Это сообщение упоминает некоторые дополнительные функции между 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и это сработало как шарм. К сожалению, ни одно из других решений, опубликованных здесь, не помогло мне.


0

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

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

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


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