如何将命令行参数传递给SBT 0.13.1中的程序?

如何将命令行参数传递给SBT 0.13.1中的程序?,sbt,Sbt,我刚切换到SBT 0.13.1,要么arg处理发生了变化,要么出现了bug。下面是我正在测试的内容(名为sbt test.scala): 当我运行/sbt-test.scala--arg=val时,我得到以下错误: [error] Expected ID character [error] Not a valid command: arg [error] arg=val 使用SBT 0.13.0运行具有相同参数的相同脚本会产生预期的结果: Args: --arg=val someone 类似

我刚切换到SBT 0.13.1,要么arg处理发生了变化,要么出现了bug。下面是我正在测试的内容(名为
sbt test.scala
):

当我运行
/sbt-test.scala--arg=val
时,我得到以下错误:

[error] Expected ID character
[error] Not a valid command: arg
[error] arg=val
使用SBT 0.13.0运行具有相同参数的相同脚本会产生预期的结果:

Args: --arg=val
someone
类似地,如果我将该可执行脚本转换为实际的SBT项目并尝试运行
SBT run--flag

[error] Not a valid command: flag (similar: iflast, last, alias)
[error] flag
请参阅以下文档:

批处理模式 也可以在批处理模式下运行sbt,将sbt命令的空格分隔列表指定为参数。对于采用参数的sbt命令,通过将命令和参数括在引号中,将它们作为一个参数传递给
sbt
。比如说,

$ sbt clean compile "testOnly TestA TestB"
在本例中,
testOnly
具有参数、
TestA
TestB
。命令将按顺序运行(
clean
compile
,然后
testOnly

因此,如果您不想将
--flag
解释为命令,则必须使用run:

$ sbt "run --flag"
脚本运行程序 中描述了脚本,这似乎表明除了bash引号之外,您不需要额外的引号:

实际上,要使脚本正常工作,您需要在
$@
周围添加一组转义引号,如下所示:

exec java $JAVA_OPTS -Dsbt.main.class=sbt.ScriptMain -jar "$SBT" $0 "\"$@\""

如果这是从0.13.1开始的回归,您应该向sbt报告。

让它作为脚本运行怎么样?这是问题的主要焦点。双引号只能用于单个arg。但是如果我有类似于./sbt-test.scala--flag--arg=val的内容,我会在第二个arg上得到一个错误。我要把它当作臭虫报告
java -Dsbt.main.class=sbt.ScriptMain -Dsbt.boot.directory=/home/user/.sbt/boot -jar sbt-launch.jar "$@"
exec java $JAVA_OPTS -Dsbt.main.class=sbt.ScriptMain -jar "$SBT" $0 "\"$@\""