16

我最近一直在命令行中玩 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),或者在 an 之后编写模板END并做同样的事情,但如果它存在,我正在寻找一种更轻量级的方法,因为我不想为我为此目的创建的每个 erb 脚本编写两个文件。

4

4 回答 4

20

或者,您可以使用 ruby​​ 脚本并将其作为库加载。

# vars.rb
@hello = 'kirk'
# template.html.erb
<div><%= @hello %></div>
$ erb -r './vars' template.html.erb
于 2015-05-04T18:58:57.377 回答
15

我使用环境变量的 BASH 命令行快捷方式。

外部:

STUFF=foo,bar erb input.html.erb >output.html

里面:

<%
   stuff = ENV['STUFF'].split(',')
%>

经过几分钟的电子搜索,我确定其他解决方案都是“自己编写 erb 包装器命令”的变体。可能是错的,但我不会回去。

于 2013-08-18T20:28:20.570 回答
14

请注意,Ruby 2.2 和更新版本提供了一个更好的解决方案,它是根据这个实现的:

erb var1=val1 var2=val2 my-template.erb
于 2016-09-24T09:57:09.450 回答
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.
于 2013-07-27T07:40:18.723 回答