2010-07-09 6 views
0

J'ai le script Ruby suivant qui crée un paquet Debian, qui fonctionne très bien:exécutant le système Linux commandes à partir du script 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 

est-il un moyen de Ruby où je peux laisser tomber le "cd # { dest} & & "partie de chaque commande?

Répondre

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

Dir.chdir lorsqu'elle est appelée avec un bloc va changer dans le répertoire donné, exécutez le bloc, puis revenir en arrière.

Vous pouvez également l'utiliser sans bloc, auquel cas il ne changera jamais.

+0

Sucrée. Travaillé comme un charme. Merci! –

2

Oui. Utiliser 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 
Questions connexes