From: nobu@... Date: 2014-10-17T06:40:21+00:00 Subject: [ruby-core:65773] [CommonRuby - Feature #10395] [Assigned] erb: allow variables to be set from the command line Issue #10395 has been updated by Nobuyoshi Nakada. Description updated Status changed from Open to Assigned Assignee set to Masatoshi Seki Target version set to Ruby 2.2.0 No new features for maintenance branches. And your patch doesn't allow options after variables. https://github.com/nobu/ruby/compare/Feature%2310395-erb-variables-from-commandline ---------------------------------------- Feature #10395: erb: allow variables to be set from the command line https://bugs.ruby-lang.org/issues/10395#change-49509 * 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/