Passing binding or arguments to ERB from the command line

erb, ruby, templates

Solution

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.

Problem

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.

Original source