复制替换变量的文件

时间:2012-04-03 13:42:09

标签: ruby

我有一个包含替换变量(#{...})的文件,我想将其复制到另一个文件中,变量用其值替换。

这就是我所拥有的

file = File.open(@batch_file_name, "w+")
script=File.open("/runBatch.script","r")
script.each do |line|
  file.puts(line)
end

但这显然不是正确的方法。有什么建议吗?

3 个答案:

答案 0 :(得分:3)

而不是文件中的#{...}使用ERB文件。

答案 1 :(得分:1)

不,这不是正确的方法。你不能指望Ruby神奇地将它在数据中遇到的任何#{}解释为变量插值。这会(除了其他可怕的副作用)在任何地方产生大量的安全问题。

如果你想将数据插入到一个字符串中,你需要eval它,它有自己的安全风险:

str = 'The value of x is #{x}'

puts str # The value of x is #{x}

x = "123"

puts eval "\"#{str}\"" # Thje value of x is 123

您正在尝试将哪些变量插入到数据中并不清楚。这几乎肯定是采取任何行动的错误方式。

答案 2 :(得分:1)

好的说你有一个名为tmp.file的文件,其中包含以下文字:

This is #{foobar}!

然后您可以轻松执行以下操作:

str = ""
File.open("tmp.file", "r") do |f|
  str = f.read
end
abc = "Sparta"
puts eval('"' + str + '"')

您的结果将是This is Sparta!

但正如已经建议的那样,你应该选择像ERB这样的真实模板解决方案。然后你会像Rails中的视图一样使用你的文件。而不是This is #{foobar}.,您将拥有This is <%= foobar %>.