这里有很多例子如何在bash中获取dotenv文件,但是有一个方法可以实现与dash相同的方法(这是最小的Debian安装的默认shell)?
解决方案应如下所示:
$ some foo my-command-using-env-vars
e.g。
$ env $(cat .env) my-command-using-env-vars
重要的是,该解决方案支持具有以下空格的多行值:
SSH_PRIVATE_KEY="-----BEGIN RSA PRIVATE KEY-----\nfoo\nbar\baz"
和引号中的哈希等特殊字符:
SPECIAL="foo#bar"
答案 0 :(得分:3)
您的问题似乎不是因为您使用dash
,而是希望支持\n
转义。以下内容适用于dash
并支持\n
转义:
eval "$(echo $(cat .env))" my-command-using-env-vars
这是因为与bash
不同,即使没有echo
选项,dash
中的内置-e
也支持反斜杠转义。如果非内置系统bash
支持dash
选项,则以下内容适用于echo
和-e
:
eval "$(env echo -e $(cat .env))" my-command-using-env-vars
请注意,这两种方法也可以处理其他反斜杠转义(POSIX或GNU),可能与您预期的方式不同。
一些技术说明:
$(cat .env)
执行Field Splitting,将文件.env
中的任何换行符转换为空格。
"$(env echo -e ...)"
通过echo -e
调用env
,无论当前shell如何,都会扩展反斜杠转义。双引号禁用字段拆分,以便保留换行符。