2010-07-09 1 views
0

У меня есть следующий Рубиновый скрипт, который создает пакет Debian, который работает отлично:Запуск системы Linux команд из Ruby-скрипт

 
#!/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} & & «часть каждой команды?

ответ

6
Dir.chdir(dest) do 
    # code that shall be executed while in the dest directory 
end 

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

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

+0

Сладкий. Работал как шарм. Благодаря! –

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 

 Смежные вопросы

  • Нет связанных вопросов^_^