我最近一直在使用命令行中的erb。我想制作一个简单易懂的erb模板,例如:
<%- name = "Joe"; quality = "fantastic" -%>
Hello. My name is <%= name %>. I hope your day is <%= quality %>.
如果我运行
,这是有效的erb -T - thatfile.erb
我想要做的是让name
和quality
可以从命令行参数传递,这样我就可以做类似的事情:
./thatfile.erb "Bill" "super"
从bash提示符做同样的事情。
我知道我可以编写一个ruby脚本,只读取该模板然后使用ERB.new(File.read("thatfile.erb")).result(binding)
,或者在END
之后编写模板并做同样的事情,但我正在寻找一个更轻量级的方法,如果它存在,因为我不想为我为此目的创建的每个erb脚本编写两个文件。
答案 0 :(得分:20)
或者,您可以使用ruby脚本并将其作为库加载。
# vars.rb
@hello = 'kirk'
# template.html.erb
<div><%= @hello %></div>
$ erb -r './vars' template.html.erb
答案 1 :(得分:15)
我选择了环境变量的BASH命令行快捷方式。
外:
STUFF=foo,bar erb input.html.erb >output.html
内部:
<%
stuff = ENV['STUFF'].split(',')
%>
经过几分钟的电子搜索,我确定其他解决方案都是“自己编写erb包装器命令”的变体。可能是错的,但我不会回去。
答案 2 :(得分:11)
如果您使用的是unix,请尝试以下操作:
$ cat 1.erb
Hello. My name is <%= name %>. I hope your day is <%= quality %>.
$ (echo '<% name="Joe"; quality="fantastic" %>' && cat 1.erb) | erb
Hello. My name is Joe. I hope your day is fantastic.
答案 3 :(得分:9)
请注意,Ruby 2.2及更新版提供了根据this实施的更好的解决方案:
erb var1=val1 var2=val2 my-template.erb