2012-01-24 10 views
16

on the SBT github pageに触発されて、SBTの対話モードでの実行から生成されたstdoutをファイルにリダイレクトしようとしています。SBTの実行からファイルへのリダイレクト

> run #> file('/Users/dsg/temp/temp.txt') ! 

私は、最後に!ずに両方試してみた:

は、ここに私の失敗した試みです。私は一重引用符と二重引用符の両方を試しました。何も動作しません - それはちょうど#> file(...が省略されたように振る舞い、物事は標準出力に出力され、ファイルは作成されません。

答えて

10

私はSBTのエキスパートではありませんが、これは正しい機能ではありません。

> runは、すべてのものをファイル引数として解釈しています。 #>は、プロンプトではなく、プロジェクトのsbtファイル内で使用するためにsbtライブラリの一部であるようです。

この周りを取得、私はSBT終了し、これを行うには、私の外部シェルを使用します。

$ sbt "run" > run_output.txt 
+0

を、このアプローチにもかかわらず、一般的に動作しますが、それは実際に特定のコーナーケースにおける最善のアプローチではありません。要するに、Scalaスクリプトの出力がSBTの出力と混ざり合って、パイプラインの次のステップで処理できない大きな混乱を招くことを意味する、Scalaスクリプトを使用するユースケースがあります。理想的には、たとえばstdoutにstdoutを書き込むようにSBTに指示する必要があります。このように、Scalaスクリプトからの出力は、SBTからの情報メッセージとエラーメッセージによって混合されません。 –

3

SBTコンソールからどのように行うのか分からないが、シェルのコマンドラインから、あなたはキャプチャすることができます

sbt "test" 2>&1 > test.log 
1

あなたはこれを試すことができます。

sbt test >> "log.txt" 
1

これは私の仕事:

sbt | tee log.txt 
関連する問題