3

这里有很多示例如何在 bash 中获取 dotenv 文件,但有没有人使用 dash 实现相同的方法(这是最小 Debian 安装的默认 shell)?

解决方案应如下所示:

$ some foo my-command-using-env-vars

例如

$ env $(cat .env) my-command-using-env-vars

重要的是,该解决方案支持带有空格的多行值,例如:

SSH_PRIVATE_KEY="-----BEGIN RSA PRIVATE KEY-----\nfoo\nbar\baz"

以及引号内的特殊字符(如哈希):

SPECIAL="foo#bar"
4

1 回答 1

3

似乎您的问题不在于您正在使用dash,而在于您想要支持\n转义。以下适用于dash并支持\n转义:

eval "$(echo $(cat .env))" my-command-using-env-vars

这是因为即使没有选项bash,内置的echoindash也支持反斜杠转义。如果非内置系统支持该选项,则-e以下内容适用于bash和:dashecho-e

eval "$(env echo -e $(cat .env))" my-command-using-env-vars

请注意,这两种方法还将处理其他反斜杠转义(POSIX 或 GNU),可能以与您预期不同的方式。

一些技术说明:

$(cat .env)

执行字段拆分,将文件中的任何换行符转换.env为空格。

"$(env echo -e ...)"

echo -e通过调用via扩展反斜杠转义而不考虑当前 shell env。双引号禁用字段拆分,以便保留换行符。

于 2017-08-10T11:57:10.747 回答