Tại sao lệnh Lệnh>> trong bảng điều khiển Windows không chuyển hướng tất cả thư đến tệp?


21

Tôi đang cố gắng xây dựng một dự án Scala với sbt , vì vậy tôi chạy một lệnh:

sbt clean test > log.log

Điều đó có nghĩa là mọi thông báo mà công cụ sbt ghi vào bảng điều khiển Windows phải được ghi vào tệp "log.log". Nhưng đôi khi tôi nhận được stacktrace được ghi vào bàn điều khiển và không vào tệp:

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

Tại sao lệnh ">" không chuyển hướng tất cả các tin nhắn đến một tệp?

Câu trả lời:


35

Những gì bạn đã dán không phải là đầu ra tiêu chuẩn lệnh (STDOUT), mà là đầu ra lỗi của lệnh (STDERR).

Khi bạn thêm "> output_file" vào lệnh, bạn chỉ chuyển hướng STDOUT sang tệp đó, không phải STDERR.

Nếu bạn muốn xuất lỗi, đến cùng một tệp với đầu ra tiêu chuẩn, bạn cần sử dụng

sbt clean test > log.log 2>&1

"2> & 1" làm gì, nó báo lỗi đầu ra đến cùng một nơi với kết quả đầu ra tiêu chuẩn.

Bạn cũng có thể làm một cái gì đó như thế này:

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

Nó sẽ xuất STDOUT để log.log và STDERR sang tệp thứ hai được gọi là error.log, nếu bạn muốn tách chúng.

Xem điều này về các toán tử chuyển hướng lệnh

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


3
Sự khác biệt giữa 2>&1câu trả lời của bạn và 1<&2từ liên kết là gì? Tôi luôn thấy nó theo cách của bạn, và cách khác cũng có ý nghĩa (chỉ chuyển hướng "đầu vào" thay vì "đầu ra" nhưng mặt khác lại xuất hiện như vậy), nhưng thật thú vị khi thấy lựa chọn thứ hai.
Joe

6
ngữ nghĩa ... 2>&1đang nói rằng đầu ra từ STDERR nên được chuyển hướng đến cùng một đầu ra như STDOUT. 1<&2đang nói rằng đầu ra từ STDERR nên được sử dụng làm đầu vào cho STDOUT. Cả hai đều tạo ra cùng một kết quả và chỉ đơn giản là vấn đề ưu tiên
SeanC

Lưu ý rằng, bạn phải đặt 2>&1 sau khi các > log.log.
smwikipedia
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.