0

sed为每个 Capistranio 部署运行了十几个命令,我想知道是否可以将它们链接成一个sed命令,而不是在服务器上触发几十个命令。

task :taskname do
    {:'foo' => foo, :'bar' => bar, :'foobar' => foobar, :'fubar' => fubar }.each do |search, replace|
        run "sed -i 's/#{search}/#{replace}/' file.ext"
    end
end
4

2 回答 2

3

sed本机接受十几种模式(如果您出于某种原因更喜欢sed):

{:foo => foo, :bar => bar, :foobar => foobar, :fubar => fubar}.inject("") do |acc, k, v|
  acc += " -e 's/#{k}/#{v}'"
end

run "sed #{acc} file.ext"
于 2013-08-16T05:15:23.797 回答
0

mudasobwa 的代码有效吗?使用我的 Ruby (v1.9.3),它必须是:

acc = {:foo => foo, :bar => bar, :foobar => foobar, :fubar => fubar}.inject("") do |m, p|
  m + " -e 's/#{p[0]}/#{p[1]}'"
end

run "sed #{acc} file.ext"
于 2013-08-17T01:21:14.697 回答