如何在破折号中获取 dotenv (.env) 文件?
How to source a dotenv (.env) file in dash?
这里有很多示例如何在 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"
看来您的问题不在于您正在使用 dash
,而是您想要支持 \n
转义。以下适用于 dash
并支持 \n
转义:
eval "$(echo $(cat .env))" my-command-using-env-vars
这是因为与 bash
不同,dash
中的内置 echo
即使没有 -e
选项也支持反斜杠转义。如果非内置系统 echo
支持 -e
选项,则以下内容适用于 bash
和 dash
:
eval "$(env echo -e $(cat .env))" my-command-using-env-vars
请注意,这两种方法还可以处理其他反斜杠转义(POSIX 或 GNU),方式可能与您预期的不同。
一些技术说明:
$(cat .env)
执行 Field Splitting,将文件 .env
中的任何换行符转换为空格。
"$(env echo -e ...)"
通过 env
调用 echo -e
来扩展反斜杠转义,而不管当前 shell。双引号禁用字段拆分,以便保留换行符。
这里有很多示例如何在 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"
看来您的问题不在于您正在使用 dash
,而是您想要支持 \n
转义。以下适用于 dash
并支持 \n
转义:
eval "$(echo $(cat .env))" my-command-using-env-vars
这是因为与 bash
不同,dash
中的内置 echo
即使没有 -e
选项也支持反斜杠转义。如果非内置系统 echo
支持 -e
选项,则以下内容适用于 bash
和 dash
:
eval "$(env echo -e $(cat .env))" my-command-using-env-vars
请注意,这两种方法还可以处理其他反斜杠转义(POSIX 或 GNU),方式可能与您预期的不同。
一些技术说明:
$(cat .env)
执行 Field Splitting,将文件 .env
中的任何换行符转换为空格。
"$(env echo -e ...)"
通过 env
调用 echo -e
来扩展反斜杠转义,而不管当前 shell。双引号禁用字段拆分,以便保留换行符。