19

I have been playing around with erb from the command line recently. I wanted to make a dirt simple erb template, for example the following:

<%- name = "Joe"; quality = "fantastic" -%>
Hello. My name is <%= name %>. I hope your day is <%= quality %>.

This works if I run

erb -T - thatfile.erb

what I want to do is to make name and quality be passable from command line arguments, so that I could do something like:

./thatfile.erb "Bill" "super"

from the bash prompt and do the same thing.

I am aware that I could write a ruby script that would just read that template in and then use ERB.new(File.read("thatfile.erb")).result(binding), or writing the template after an END and doing likewise, but I'm looking for a more lightweight approach if it exists, because I don't want to write two files for each erb script that I create for this purpose.

scott_fakename
  • 10,219
  • 2
  • 15
  • 20

4 Answers4

21

Alternatively, you can use a ruby script and load it in as a library.

# vars.rb
@hello = 'kirk'
# template.html.erb
<div><%= @hello %></div>
$ erb -r './vars' template.html.erb
James Lim
  • 12,915
  • 4
  • 40
  • 65
16

I went with the BASH command-line shortcut for environmental variables.

Outside:

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

Inside:

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

After a few minutes e-searching I determined the other solutions are all variations on "write the erb wrapper command yourself." Could be wrong, but I ain't going back.

Phlip
  • 5,253
  • 5
  • 32
  • 48
15

Please note that Ruby 2.2 and newer provide a much nicer solution that was implemented according to this:

erb var1=val1 var2=val2 my-template.erb
Florin Asăvoaie
  • 849
  • 1
  • 6
  • 20
11

If you are using unix, try following:

$ 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.
falsetru
  • 357,413
  • 63
  • 732
  • 636