从Rakefile执行bash命令

这个问题在这里已经有了答案:

  • 从Ruby 19调用shell命令的答案

  • 我认为耙子想要发生的方式是:http://rubydoc.info/gems/rake/FileUtils#sh-instance_method例如:

    task :test do
      sh "ls"
    end
    

    内置rake函数sh负责处理命令的返回值(如果命令的返回值不是0,则任务失败),并且还会输出命令输出。


    有几种方法可以在ruby中执行shell命令。 一个简单的(也许是最常见的)是使用反引号:

    task :hello do
      `echo "World!"`
    end
    

    在shell命令的标准输出成为返回值的情况下,反引号具有很好的效果。 例如,你可以通过ls的输出

    shell_dir_listing = `ls`
    

    但是还有很多其他的方法可以调用shell命令,它们都有好处/缺点并且工作方式不同。 这篇文章详细解释了这些选择,但是这里有一个快速总结的可能性:

  • stdout =%x {cmd} - 反引号的替代语法,在幕后它做同样的事情

  • exec(cmd) - 用新的cmd进程完全替换正在运行的进程

  • 成功=系统(cmd) - 运行一个子进程并在成功/失败时返回true / false(基于cmd退出状态)

  • IO#popen(cmd){| io | } - 运行一个子进程并将stdout和stderr连接到io

  • stdin,stdout,stderr = Open3.popen3(cmd) - 运行一个子进程并连接到所有管道(in,out,err)


  • %{echo "World!"}定义一个String。 我希望你想%x{echo "World!"}

    %x{echo "World!"}执行命令并返回输出(stdout)。 你不会看到结果。 但你可以这样做:

    puts %x{echo "World!"}
    

    有更多方法可以调用系统命令:

  • 反拨:`
  • system( cmd )
  • popen
  • Open3#popen3
  • 链接地址: http://www.djcxy.com/p/25283.html

    上一篇: Execute bash commands from a Rakefile

    下一篇: Jenkins Build Job Failed due to Ruby Gem Error