2013-06-30 43 views
1

我在運行一個shell腳本的Build.scala中有一個構建步驟。但是,當它運行shell腳本時,sbt控制檯不顯示shell腳本的輸出,並且sbt提示符停止並不執行任何操作。從scala啓動一個shell腳本構建

我想要在後臺啓動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

你看過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()) }} 
相關問題