从scala Build启动shell脚本

时间:2013-06-30 09:52:52

标签: scala sbt

我的Build.scala中有一个运行shell脚本的构建步骤。但是,当它运行shell脚本时,sbt控制台不显示shell脚本的输出,而sbt提示符只是停止并且什么都不做。

我希望shell脚本在后台启动,但我也希望它的输出显示在控制台上。这就是我现在正在做的事情:

  val startHostAndAppTask = startHostAndApp <<= dist map {d =>
      file("target/akkesb").delete()

      println("copying over akkesb distribution")
      FileUtils.copyDirectory(file("../../../target/akkesb"), file("target/akkesb"))
      file("target/akkesb/akkesb_startup.sh").setExecutable(true)
      file("target/akkesb/bin/start").setExecutable(true)

      println("copying akkesb.conf into akkesb disribution")
      IO.copyFile(file("akkesb.conf"), file("target/akkesb/akkesb.conf"))

      println("About to start akkesb")
      println( Process("sh", Seq("target/akkesb/akkesb_startup.sh", "&")).!!)

      println("starting this app")
      run
      d
    }

1 个答案:

答案 0 :(得分:1)

您是否查看了ProcessBuilder的API。 !!方法说:

  

启动此构建器表示的进程,直到它退出,并将输出作为String返回。

(我的重点)。我想你会想要像

这样的东西
import sys.process._
val pb = Seq("sh", "target/akkesb/akkesb_startup.sh", "&") #> Console.out
val p  = pb.run()
// future { blocking { println(p.exitValue()) }}