Windows konsolundaki “>” komutu neden tüm mesajları bir dosyaya yönlendirmiyor?


21

Sbt ile bir Scala projesi oluşturmaya çalışıyorum , bu yüzden bir komut çalıştırıyorum:

sbt clean test > log.log

Bu, sbt aracının Windows konsoluna yazdığı herhangi bir iletinin "log.log" dosyasına yazılması gerektiği anlamına gelir. Ancak bazen dosyaya değil, konsola yazılmış yığın izini alıyorum:

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

Neden ">" komutu tüm mesajları bir dosyaya yönlendirmiyor?

Yanıtlar:


35

Yapıştırdığınız komut standart çıktı (STDOUT) değil, komutun hata çıktısı (STDERR).

Komuta "> output_file" eklediğinizde, STDEROUT komutunu değil, yalnızca STDOUT komutunu o dosyaya yönlendiriyorsunuzdur.

Hata çıktısı almak istiyorsanız, standart çıktı ile aynı dosyaya kullanmanız gerekir.

sbt clean test > log.log 2>&1

"2> & 1", standart çıktı sonuçlarıyla aynı yere çıktı hatası veriyor.

Ayrıca böyle bir şey yapabilirsiniz:

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

Bunları ayırmak istiyorsanız, STDOUT komutunu log.log dosyasına ve STDERR'yi error.log adlı ikinci dosyaya gönderir.

Komut yönlendiricisi operatörleri hakkında buna bakın

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


3
2>&1Cevabınız 1<&2ile linkiniz arasındaki fark nedir ? Her zaman senin yolunu gördüm ve diğer yol da anlam ifade ediyor ("çıktı" yerine "girdi" yi yönlendirmek, ancak aynı şekilde görünmesi), ama ikinci seçimi görmek ilginç.
Joe,

6
semantics ... 2>&1, STDERR çıkışının STDOUT ile aynı çıkışa yönlendirilmesi gerektiğini söylüyor. 1<&2STDERR'den gelen çıkışın STDOUT'a girdi olarak kullanılması gerektiğini söylüyor. Her ikisi de aynı sonucu verir ve sadece bir tercih meselesidir
SeanC

Not, koymalıdır 2>&1 sonra> log.log .
smwikipedia
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.