2

引数として渡された 2 つの SBT コマンドと共に、Scala からプロセス (さらに言えば SBT) を生成したいと考えています。シェル スクリプトを作成しました( sbt Documentation の手動インストールsbt.shの簡易版):

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

/home/bob/workingdirUbuntu の 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 では失敗します。私は完全なbashコマンドをpseq使用する普通の人でした。String引数を明示的Seqに分割するために (引用符内であっても、任意のスペースではなく) に変更しました。

2つの呼び出しの違い、または私が間違っていることを誰か指摘できますか?

4

1 に答える 1

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 の両方で動作します。コマンド文字列として使用/home/bob/sbt.sh "project Foo" "run"するのは、Windows では洗練されておらず、Linux では機能しません。

于 2013-03-19T09:12:40.127 に答える