是否有实用程序可以从环境文件中读取环境变量,然后运行命令(比工头轻巧)?


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可以工作?
Daniel Widrick

@ IVlint67我已经稍微改善了这个问题。
wodow

Answers:


19

您可以在活动的shell中获取环境文件并运行程序:

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

-a交换机出口的所有变量,使它们对程序可用。


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

@fiatjaf如果POSIX Shell可以完成工作并且不需要真正需要bash的功能,那么为什么在这种情况下要使用bash?此外,默认情况下,bash并非在所有系统上都可用(例如FreeBSD)。
Marco Marco

哦,对,很有道理,那么我认为您的方法更好。我只是提供了Bash替代方案,因为我觉得写它更舒服。
fiatjaf

2

另一种选择是envdir

envdir运行另一个程序,该程序根据指定目录中的文件修改了环境。


这篇文章提到之间的一些互补的特征envdirrunitchpst; 也就是说,更改环境变量的能力反映在运行过程的状态中。帖子是关于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)如果使用多行分配,则中断。
Marco Marco
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.