从命令行向ERB传递绑定或参数

sco*_*ame 14 ruby templates erb

我最近一直在使用命令行中的erb.我想制作一个简单的简单erb模板,例如以下内容:

<%- name = "Joe"; quality = "fantastic" -%>
Hello. My name is <%= name %>. I hope your day is <%= quality %>.
Run Code Online (Sandbox Code Playgroud)

如果我跑,这是有效的

erb -T - thatfile.erb
Run Code Online (Sandbox Code Playgroud)

我想做的是从命令行参数中创建namequality通过,这样我就可以执行以下操作:

./thatfile.erb "Bill" "super"
Run Code Online (Sandbox Code Playgroud)

从bash提示符做同样的事情.

我知道我可以编写一个ruby脚本,只读取该模板然后使用ERB.new(File.read("thatfile.erb")).result(binding),或者在END执行之后编写模板,但我正在寻找一种更轻量级的方法,如果它存在,因为我不我想为我为此创建的每个erb脚本编写两个文件.

Jam*_*Lim 20

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

# vars.rb
@hello = 'kirk'
Run Code Online (Sandbox Code Playgroud)
# template.html.erb
<div><%= @hello %></div>
Run Code Online (Sandbox Code Playgroud)
$ erb -r './vars' template.html.erb
Run Code Online (Sandbox Code Playgroud)


Phl*_*lip 15

我使用BASH命令行快捷方式获取环境变量.

外:

STUFF=foo,bar erb input.html.erb >output.html
Run Code Online (Sandbox Code Playgroud)

内:

<%
   stuff = ENV['STUFF'].split(',')
%>
Run Code Online (Sandbox Code Playgroud)

在几分钟的电子搜索之后,我确定其他解决方案都是"自己编写erb包装器命令"的所有变体.可能是错的,但我不会回去.


fal*_*tru 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.
Run Code Online (Sandbox Code Playgroud)


Flo*_*aie 11

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

erb var1=val1 var2=val2 my-template.erb
Run Code Online (Sandbox Code Playgroud)