為什麼 Windows 控制台中的「>」指令不將所有訊息重新導向到檔案?

為什麼 Windows 控制台中的「>」指令不將所有訊息重新導向到檔案?

我正在嘗試建立一個斯卡拉項目與sbt,所以我運行一個命令:

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

為什麼“>”命令不將所有訊息重定向到檔案?

答案1

您貼上的不是命令標準輸出(STDOUT),而是命令的錯誤輸出(STDERR)。

當您將“> output_file”新增至命令時,您僅將 STDOUT 重新導向至該文件,而不是 STDERR。

如果您想將錯誤輸出到與標準輸出相同的文件,您需要使用

sbt clean test > log.log 2>&1

「2>&1」的作用是,它表示將錯誤輸出到與標準輸出結果相同的位置。

你也可以這樣做:

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

如果您想將它們分開,它將把 STDOUT 輸出到 log.log,將 STDERR 輸出到名為 error.log 的第二個檔案。

請參閱命令重新導向器運算子的內容

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

相關內容