From: jos@... Date: 2014-10-18T02:28:13+00:00 Subject: [ruby-core:65774] [CommonRuby - Feature #10395] erb: allow variables to be set from the command line Issue #10395 has been updated by Jos Backus. Thanks Nobu, that looks like a much better implementation. Appreciate your help. ---------------------------------------- Feature #10395: erb: allow variables to be set from the command line https://bugs.ruby-lang.org/issues/10395#change-49511 * Author: Jos Backus * Status: Assigned * Priority: Normal * Assignee: Masatoshi Seki * Category: * Target version: Ruby 2.2.0 ---------------------------------------- This would make erb more useful from the command line. Granted the use of Binding#eval is dangerous so one has to be careful. Newer versions of Ruby have Binding#local_variable_set which can be used instead but this works with Ruby 2.0.0. ~~~ jonagold:local jos$ cat /tmp/erb-template This is <%= foo %> And this is <%= bar %> ~~~ ~~~diff jonagold:local jos$ diff -u /usr/bin/erb /tmp/erb --- /usr/bin/erb 2014-05-15 22:14:36.000000000 -0700 +++ /tmp/erb 2014-10-16 22:29:37.000000000 -0700 @@ -114,6 +114,13 @@ exit 1 end + vars = ARGV.take_while {|arg| arg[/^\w+=/]} + ARGV.slice!(0, vars.size) + vars.each do |var| + k, v = var.split('=', 2) + TOPLEVEL_BINDING.eval %Q(#{k} = "#{v}") + end + $<.set_encoding(Encoding::ASCII_8BIT, nil) src = $<.read filename = $FILENAME ~~~ ~~~ jonagold:local jos$ /tmp/erb foo=FOO bar=123 /tmp/erb-template This is FOO And this is 123 jonagold:local jos$ ~~~ -- https://bugs.ruby-lang.org/