考虑以下带有内容的.env
(dotenv)文件
FOO="hello\nworld"
和脚本test.rb
require 'dotenv/load'
puts ENV['FOO']
puts ENV['BAR']
运行BAR="hello\nworld" ruby test.rb
会产生以下输出:
hello
world
hello\nworld
如何防止ENV['BAR']
被视为字符串文字?我的实际用例是将环境变量传递给带有Travis CI的Rakefile,无论我做什么,我都无法将新行传递给我的脚本。使用.env
文件进行本地开发可以正常工作。
答案 0 :(得分:1)
dotenv解析环境变量的方式与ruby的ENV模块不同。您可以在dotenv文档中看到他们使用换行符here调出特殊行为。
如果您需要多行变量,例如私钥,则可以 双引号字符串并使用\ n字符表示换行符:
PRIVATE_KEY =“-----开始RSA私钥----- \ nHkVN9 ... \ n -----结束DSA 私钥----- \ n“
如果您使用的是bash或zsh,则可以使用shell quoting在命令行上创建环境变量:
BAR=$'hello\nworld'
程序的输出是:
▶ BAR=$'hello\nworld' ruby dotenv.rb
hello
world
hello
world