我使用linux命令生成文件“a.txt”。现在我需要读取文件“a.txt”的第一个单词并更新名为“b.txt”的现有文件。我将在b.txt中搜索一个名为“/ fill”的单词,并将其替换为从a.txt中读取的单词。下面是代码
bash 'example' do
code <<-EOH
cat ex.txt >> a.txt
EOH
end
test = /#{'cat /a.txt'}/
file_names = ['/b.txt']
file_names.each do |file_name|
text = File.read(file_name)
new_contents = text.gsub(/fill, test)
puts new_contents
File.open(file_name, "w") {|file| file.puts new_contents }
你能帮忙吗
答案 0 :(得分:1)
有点难以理解,你真正想要实现的目标。您的代码有一些问题。一般建议:
ruby_block
资源中,以便在Chef的收敛阶段执行Chef::Util::FileEdit
(有关更多灵感,请参阅this question)。)file
资源,并根据您使用content
阅读的内容指定File.read
。如上所述,ruby_block
之外的ruby代码在编译阶段(which precedes the convergence phase)执行。如果你太早了(因为源文件尚未存在,你可以使用lazy
块进行延迟评估:
file "b.txt" do
content lazy { File.read .. }
end