gpt4 book ai didi

scala - 带有命令行参数的 bash 与 scala.sys.process.Process

转载 作者:行者123 更新时间:2023-12-04 18:28:34 24 4
gpt4 key购买 nike

我想从 Scala 生成一个进程(就此而言是 SBT),以及作为参数传递的两个 SBT 命令。我做了一个sbt.sh shell 脚本(Manual Installation in sbt Documentation 的简化版):

java -jar /home/bob/sbt/sbt/bin/sbt-launch.jar "$@"

如果当我在 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为了使参数拆分明确(而不是在任何空间,即使在引号内)。

谁能指出这两个调用之间有什么区别,或者我做错了什么?

最佳答案

我遇到了解决方案。原来是微不足道的,但无论如何值得分享:

// 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 上运行。使用 /home/bob/sbt.sh "project Foo" "run"作为命令字符串在 Windows 上相当不优雅,在 Linux 上不起作用。

关于scala - 带有命令行参数的 bash 与 scala.sys.process.Process,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15494508/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com