我的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
}
答案 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()) }}