2017-08-10 52 views
2

这里有很多例子说明如何在bash中获取一个dotenv文件,但是任何人都可以使用破折号(这是最小的Debian安装的默认shell)实现相同的方法?如何在短划线中输入一个dotenv(.env)文件?

该解决方案应该是这样的:

$ 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" 

回答

2

看来,你的问题不是太多,你使用dash但你想支持\n转义。在dash下工作,支持\n逃逸:

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

这是因为不像bash内置在dashecho支持反斜杠即使没有-e选项。在这两个bashdash下工作,提供了非内置的系统echo支持-e选项:

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

注意,这两种方法也将处理其他反斜杠(无论是POSIX或GNU),可能以不同于你的期望的方式。

一些技术说明:

$(cat .env) 

执行Field Splitting,将任何换行符在文件.env成空格。

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

膨胀反斜线通过经由env调用echo -e不管当前壳的逸出。双引号禁用字段拆分,以便保留换行符。

+0

感谢您的解决方案!只是为了好奇,在上述情况下如何处理另一个反斜杠? –

+0

@BastianVenthur查看'dash'和'bash'手册页并搜索内置命令。对于'env echo',请参阅'echo'手册页。 – nwellnhof

相关问题