Actions
Feature #10395
closederb: allow variables to be set from the command line
Description
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 %>
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$
Updated by nobu (Nobuyoshi Nakada) over 10 years ago
- Description updated (diff)
- Status changed from Open to Assigned
- Assignee set to seki (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.
Updated by josb (Jos Backus) over 10 years ago
Thanks Nobu, that looks like a much better implementation. Appreciate your help.
Updated by nobu (Nobuyoshi Nakada) over 10 years ago
- Status changed from Assigned to Closed
- % Done changed from 0 to 100
Applied in changeset ruby-trunk:r48786.
erb: set variables from the command line
- bin/erb (ARGV.switch, ERB::Main#run): allow variables to be set
from the command line. [ruby-core:65772] [Feature #10395]
Updated by hsbt (Hiroshi SHIBATA) over 3 years ago
- Project changed from 14 to Ruby
- Target version deleted (
Ruby 2.2.0)
Actions
Like0
Like0Like0Like0Like0