【问题标题】:Running Linux system commands from Ruby script从 Ruby 脚本运行 Linux 系统命令
【发布时间】:2010-07-09 21:28:26
【问题描述】:

我有以下创建 Debian 包的 Ruby 脚本,它运行良好:

#!/usr/bin/ruby dest = "#{File.dirname(__FILE__)}/../build" 包=“富” [ "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", ].每个都做|命令| puts 命令 系统(命令) 结尾

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

【问题讨论】:

    标签: ruby linux system


    【解决方案1】:
    Dir.chdir(dest) do
      # code that shall be executed while in the dest directory
    end
    

    Dir.chdir 使用块调用时将更改到给定目录,执行块然后变回。

    你也可以不加块地使用它,在这种情况下它永远不会变回来。

    【讨论】:

    • 甜蜜。像魅力一样工作。谢谢!
    【解决方案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
    

    【讨论】:

      猜你喜欢
      • 2013-06-12
      • 2013-09-17
      • 2011-03-10
      • 1970-01-01
      • 2014-03-18
      • 1970-01-01
      • 2017-06-20
      • 2018-05-04
      • 1970-01-01
      相关资源
      最近更新 更多