Передача привязки или аргументов в ERB из командной строки

Я недавно играл с 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 ​​ script, который просто прочитал бы этот шаблон, а затем использовал бы ERB.new(File.read("thatfile.erb")).result(binding) или написал шаблон после END и делал бы то же самое, но я ищу еще если он существует, потому что я не хочу писать два файла для каждого erb script, который я создаю для этой цели.

Ответ 1

Если вы используете 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.

Ответ 2

Кроме того, вы можете использовать ruby ​​ script и загружать его в виде библиотеки.

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

Ответ 3

Я пошел с ярлыком командной строки BASH для переменных окружения.

Внешний вид:

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

Внутри:

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

После нескольких минут электронного поиска я определил, что другие решения - все варианты "написать команду erb wrapper самостоятельно". Может быть неправильно, но я не вернусь.

Ответ 4

Обратите внимание, что Ruby 2.2 и новее предоставляют гораздо более приятное решение, которое было реализовано в соответствии с this:

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