我想从 Scala 生成一个进程(就此而言是 SBT),以及作为参数传递的两个 SBT 命令。我制作了一个sbt.sh
shell 脚本(sbt 文档中手动安装的简化版):
java -jar /home/bob/sbt/sbt/bin/sbt-launch.jar "$@"
/home/bob/workingdir
当我从 Ubuntu 中的 bash 提示符(作为工作目录)调用脚本时,如果工作正常:
~/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 命令的普通人。我变成 aSeq
是为了让参数拆分明确(而不是在任何空间,即使在引号内)。
谁能指出这两个调用之间有什么区别,或者我做错了什么?