2010-07-09 62 views
0

我有一個創建一個Debian軟件包,它的工作原理以下罰款Ruby腳本:運行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 

是否有紅寶石的方式,我可以不指定「CD#{ dest} & &「每個命令的一部分?

回答

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

Dir.chdir當用一個塊調用時會改變到給定的目錄,執行該塊然後改回來。

您也可以在沒有塊的情況下使用它,在這種情況下,它永遠不會變回。

+0

甜。像魅力一樣工作。謝謝! – 2010-07-09 21:49:16

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