Запуск системных команд Linux из скрипта Ruby - PullRequest
0 голосов
/ 10 июля 2010

У меня есть следующий скрипт на 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 ]

6 голосов
/ 10 июля 2010
Dir.chdir(dest) do
  # code that shall be executed while in the dest directory
end

Dir.chdir при вызове с блоком изменится на данный каталог, выполнить блок и затем вернуться обратно.

Вы также можете использовать его без блока, в этом случае он никогда не изменится обратно.

2 голосов
/ 10 июля 2010

Да. Используйте 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
...