从Ruby脚本运行Linux系统命令

时间:2010-07-09 21:28:27

标签: ruby linux system

我有以下Ruby脚本创建一个Debian包,它可以正常工作:

#!/usr/bin/ruby

  dest = "#{File.dirname(__FILE__)}/../build"
  package = "foo"

  [
    "cd #{dest} && tar czvf data.tar.gz bin console data.sql etc filter install.rb",
    "cd #{dest} && tar czvf control.tar.gz control",
    "cd #{dest} && echo 2.0 > debian-binary",
    "cd #{dest} && ar -cr #{package}.deb debian-binary control.tar.gz data.tar.gz",
    "cd #{dest} && mv #{package}.deb ..",
    "cd #{dest} && rm data.tar.gz control.tar.gz",
  ].each do |command|
    puts command
    system(command)
  end

在Ruby中有没有办法可以省去每个命令的“ cd#{dest}&& ”部分?

2 个答案:

答案 0 :(得分:6)

Dir.chdir(dest) do
  # code that shall be executed while in the dest directory
end
使用块调用

Dir.chdir将更改为给定目录,执行块然后更改回来。

您也可以在没有阻止的情况下使用它,在这种情况下它永远不会改变。

答案 1 :(得分:2)

是。使用Dir.chdir

#!/usr/bin/ruby

  dest = "#{File.dirname(__FILE__)}/../build"
  package = "foo"

  Dir.chdir dest
  [
    "tar czvf data.tar.gz bin console data.sql etc filter install.rb",
    "tar czvf control.tar.gz control",
    "echo 2.0 > debian-binary",
    "ar -cr #{package}.deb debian-binary control.tar.gz data.tar.gz",
    "mv #{package}.deb ..",
    "rm data.tar.gz control.tar.gz",
  ].each do |command|
    puts command
    system(command)
  end