2013-03-19 157 views
2

我想從Scala產生一個進程(SBT),以及兩個作爲參數傳遞的SBT命令。我做了sbt.sh shell腳本(的Manual Installation in sbt Documentation簡化版本):bash與帶命令行參數的scala.sys.process.Process

java -jar /home/bob/sbt/sbt/bin/sbt-launch.jar "[email protected]" 

如果工作正常,當我調用腳本從Ubuntu的一個bash提示符(/home/bob/workingdir是工作目錄):

~/sbt.sh "project Foo" "run" 

然而,我想用一段代碼在Scala程序中調用它:

val pseq = Seq("/home/bob/sbt.sh", "\"project Foo\"", "\"run\"") 
val pb = scala.sys.process.Process(pseq, new java.io.File("/home/bob/workingdir")) 
pb.! 

SBT啓動並正常加載,然後以下錯誤輸出失敗:

[error] Expected key 
[error] "project Foo" 
[error]^

它在Windows 8上正常工作,但在Ubuntu 12.10上失敗。我的pseq曾經是一個普通的String與完整的bash命令。我變成了Seq爲了得到明確的參數拆分(而不是在任何空間,即使在引號內)。

任何人都可以指出兩個調用之間有什麼區別,或者我做錯了什麼?

回答

4

我遇到了解決方案。原來是微不足道的,但值得分享:

// no \"-quoting of passed SBT commands here! 
val pseq = Seq("/home/bob/sbt.sh", "project Foo", "run") 
val pb = scala.sys.process.Process(pseq, new java.io.File("/home/bob/workingdir")) 
pb.! 

整潔,並在Windows和Linux上工作。在Windows上使用/home/bob/sbt.sh "project Foo" "run"作爲命令字符串相當不夠優雅,並且在Linux上不起作用。