【问题标题】:Passing binding or arguments to ERB from the command line从命令行向 ERB 传递绑定或参数
【发布时间】:2013-07-27 07:18:20
【问题描述】:

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

【问题讨论】:

    标签: ruby templates erb


    【解决方案1】:

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

    # vars.rb
    @hello = 'kirk'
    
    # template.html.erb
    <div><%= @hello %></div>
    
    $ erb -r './vars' template.html.erb
    

    【讨论】:

    • 我喜欢这样可以说如何将数据与“逻辑”分开,以及如何简单地坚持使用 ruby​​。
    【解决方案2】:

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

    外面:

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

    内部:

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

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

    【讨论】:

      【解决方案3】:

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

      erb var1=val1 var2=val2 my-template.erb
      

      【讨论】:

      • 有没有办法用这种语法处理数组?
      • 使用逗号分隔的列表并拆分它们。它只获取字符串。
      • 当变量被引用为@vars 时,这似乎对我不起作用。没有@也可以正常工作。
      • @Daniel 文档也是这么说的 :)
      【解决方案4】:

      如果您使用的是 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.
      

      【讨论】:

      • 将echo 升级到cat input.html.erb 就可以了
      猜你喜欢
      • 2016-12-28
      • 1970-01-01
      • 1970-01-01
      • 2016-03-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-02-19
      相关资源
      最近更新 更多