1

我的 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
    }
4

1 回答 1

1

你看过ProcessBuilder的 API 吗?该!!方法说:

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

(我的重点)。我想你会想要类似的东西

import sys.process._
val pb = Seq("sh", "target/akkesb/akkesb_startup.sh", "&") #> Console.out
val p  = pb.run()
// future { blocking { println(p.exitValue()) }}
于 2013-06-30T20:06:59.617 回答