防止环境变量被视为字符串文字

时间:2017-05-21 11:16:38

标签: ruby travis-ci

考虑以下带有内容的.envdotenv)文件

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文件进行本地开发可以正常工作。

1 个答案:

答案 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
相关问题