2013-06-30 2 views
1

У меня есть встроенный шаг в моей Build.scala, который запускает сценарий оболочки. Однако, когда он запускает сценарий оболочки, консоль sbt не отображает вывод из сценария оболочки, а приглашение sbt просто останавливается и ничего не делает.Запустите скрипт оболочки из scala. Build

Я хотел бы, чтобы сценарий оболочки запускался в фоновом режиме, но мне также хотелось бы, чтобы его вывод отображался на консоли. Вот что я делаю сейчас:

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

Вы изучали API ProcessBuilder. Метод !! говорит:

Запускает процесс, представленный этим застройщиком, блоки, пока он не выйдет, и возвращает результат в виде строки.

(Мое внимание). Я думаю, вам нужно что-то вроде

import sys.process._ 
val pb = Seq("sh", "target/akkesb/akkesb_startup.sh", "&") #> Console.out 
val p = pb.run() 
// future { blocking { println(p.exitValue()) }} 
Смежные вопросы