Wie übergeben Sie Befehl Linie Argumente, um das Programm im SBT 0.13.1?
Ich wechselte zu SBT 0.13.1 und entweder arg handling geändert oder es ist ein bug. Hier ist, was ich bin, die Tests mit (namens sbt-test.scala
):
#!/bin/sh
SBT_0_13_0="/path/to/sbt-launch-0.13.0.jar"
SBT_0_13_1="/path/to/sbt-launch-0.13.1.jar"
SBT="$SBT_0_13_1"
exec java $JAVA_OPTS -Dsbt.main.class=sbt.ScriptMain -jar "$SBT" $0 "$@"
!#
/***
scalaVersion := "2.10.3"
libraryDependencies ++= Seq(
"com.typesafe" % "config" % "1.0.0"
)
*/
import com.typesafe.config.{ConfigFactory, Config}
println(s"Args: ${args mkString ", "}")
val cfg = ConfigFactory.parseString(
"""
|credentials {
| user = someone
| pass = s3cr3t
|}
""".stripMargin)
println(cfg getString "credentials.user")
Wenn ich ./sbt-test.scala --arg=val
bekomme ich die folgende Fehlermeldung:
[error] Expected ID character
[error] Not a valid command: arg
[error] arg=val
Läuft das gleiche Skript mit dem gleichen argument, mit SBT-0.13.0 Erträge erwartet:
Args: --arg=val
someone
Ähnlich, wenn ich wiederum, dass das ausführbare Skript in eine tatsächliche SBT-Projekt, und führen Sie sbt run --flag
bekomme ich
[error] Not a valid command: flag (similar: iflast, last, alias)
[error] flag
Du musst angemeldet sein, um einen Kommentar abzugeben.
Finden Sie in der Dokumentation auf Batch-Modus:
Also, wenn Sie nicht möchten, dass
--flag
interpretiert werden als ein Befehl, Sie zu zitieren, es mit run:sbt script runner
Den scripting ist beschrieben in Skripte, REPL, und Abhängigkeiten, die scheint zu sagen Sie nicht brauchen, zusätzliche Zitate anderen als die bash-Zitate:
In der Realität machen, um Ihr Skript zu arbeiten, müssten Sie eine andere sets Escape-Anführungszeichen
$@
wie diese:Ist dies eine regression, die begann in 0.13.1, sollten Sie sich umgehend an sbt.