![为什么 Windows 控制台中的“>”命令不将所有消息重定向到文件?](https://linux22.com/image/1428443/%E4%B8%BA%E4%BB%80%E4%B9%88%20Windows%20%E6%8E%A7%E5%88%B6%E5%8F%B0%E4%B8%AD%E7%9A%84%E2%80%9C%3E%E2%80%9D%E5%91%BD%E4%BB%A4%E4%B8%8D%E5%B0%86%E6%89%80%E6%9C%89%E6%B6%88%E6%81%AF%E9%87%8D%E5%AE%9A%E5%90%91%E5%88%B0%E6%96%87%E4%BB%B6%EF%BC%9F.png)
我正在尝试建立一个Scala项目性功能障碍,因此我运行一个命令:
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 的第二个文件。
请参阅有关命令重定向器操作符的