Windowsコンソールの「>」コマンドがすべてのメッセージをファイルにリダイレクトしないのはなぜですか?


21

私はsbtScalaプロジェクトを構築しようとしているので、コマンドを実行します:

sbt clean test > log.log

つまり、sbtツールがWindowsコンソールに書き込むメッセージはすべて「log.log」ファイルに書き込まれる必要があります。しかし、時々、ファイルではなくコンソールにスタックトレースが書き込まれます:

C:\path>sbt clean test > log.log
java.lang.ExceptionInInitializerError
        at scala.concurrent.impl.Future$PromiseCompletingRunnable.liftedTree1$1(Future.scala:24)
        at scala.concurrent.impl.Future$PromiseCompletingRunnable.run(Future.scala:24)
        at scala.concurrent.impl.ExecutionContextImpl$AdaptedForkJoinTask.exec(ExecutionContextImpl.scala:121)
        at scala.concurrent.forkjoin.ForkJoinTask.doExec(ForkJoinTask.java:260)
        at scala.concurrent.forkjoin.ForkJoinPool$WorkQueue.runTask(ForkJoinPool.java:1339)
        at scala.concurrent.forkjoin.ForkJoinPool.runWorker(ForkJoinPool.java:1979)
        at scala.concurrent.forkjoin.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:107)
Caused by: java.lang.ClassCastException: Class org.infinispan.configuration.parsing.Parser60 does not implement org.infinispan.configuration.parsing.ConfigurationParser

「>」コマンドがすべてのメッセージをファイルにリダイレクトしないのはなぜですか?

回答:


35

貼り付けたのは、コマンドの標準出力(STDOUT)ではなく、コマンドのエラー出力(STDERR)です。

コマンドに「> output_file」を追加すると、STDERRではなく、STDOUTのみがそのファイルにリダイレクトされます。

エラーを標準出力と同じファイルに出力する場合は、使用する必要があります

sbt clean test > log.log 2>&1

「2>&1」が行うことは、標準出力の結果と同じ場所にエラーを出力するということです。

次のようなこともできます:

sbt clean test > log.log 2>error.log

STDOUTをlog.logに出力し、STDERRをerror.logという2番目のファイルに出力します(それらを分離する場合)。

コマンドリダイレクタ演算子についてはこちらをご覧ください

http://www.microsoft.com/resources/documentation/windows/xp/all/proddocs/en-us/redirection.mspx?mfr=true


3
2>&1あなたの答えと1<&2リンクからの違いは何ですか?私はいつもあなたのやり方を見てきましたし、他の方法も理にかなっています(「出力」の代わりに「入力」をリダイレクトしますが、それ以外は同じように見えます)が、2番目の選択肢を見るのは面白いです。
ジョー14年

6
セマンティクス... 2>&1は、STDERRからの出力をSTDOUTと同じ出力にリダイレクトする必要があると言っています。1<&2STDERRからの出力をSTDOUTへの入力として使用する必要があると言っています。どちらも、同じ結果を生成し、単に好みの問題です
SeanC

2>&1 に置く必要があることに注意してください> log.log
smwikipedia
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.