Yalnızca stderr'ı nasıl yeniden yönlendiririm?


13

Bunu yaparken biraz sorun yaşıyorum. Derlenmiş bir .java dosyasını çalıştırmak ve yalnızca stderr hata adlı bir dosyaya yeniden yönlendirmek gerekiyor. Yani .java dosyası javaProgram.java olarak adlandırılır.

Ben denedim budur:

java javaProgram 2> error

Ancak ben

cat error

belirli bir .java dosyasının hiçbir hatası olmadığını bildiğimde bile orada bir şeyler var gibi görünüyor. Yanlış bir şey mi yapıyorum? Bu hata dosyasının görüntülenmesini istediğim tek şey hatalar, başka bir şey değil.

Yanıtlar:


16

İlk denemeniz doğruydu; 2>filenamestderr'ı nasıl yönlendirdiğinizdir. Programınızın stderr'a bazı hatalar yazmaması veya java programının stderr'a çıktı veren başka programlar çalıştırması olabilir.


1

Basit cevap, bunun mümkün olmamasıdır. Standart hata, tanı çıktısını yazmak için kullanılır ve tanı / hata çıktısının ne olduğunu tanımlamak uygulamalara bağlıdır. Bu POSIX standardına göre .


2
POSIX spesifikasyonundan bahsedecekseniz, lütfen belgenin tamamını değil, belirli bir bölümü belirtin. Çok büyük.
jordanm

Ne zamandan beri stderr'i POSIX'te dosyaya yönlendirmek mümkün değil? Bunun için gerçek bir teklif vermeniz gerekecek.
l0b0

1
@ l0b0, Jeight'ın söylediği şey bu değil. Neyin STDOUT'a ve neyin STDERR'a gittiğine karar vermek başvurulara bağlıdır; örneğin, her şeyi STDOUT'a sokmak tamamen mümkün olacak ve daha sonra STDERR'ı yeniden yönlendirmenin hiçbir etkisi olmayacaktır. Veya, bu durumda olduğu gibi, kesinlikle hata olmayan bazı şeyleri STDERR'a koymak mümkündür (ve standart uygulama). Hataları diğer tanılama yöntemlerinden ayrıştırmanın tek yolu, hataların 'HATA:' veya başka bir şeyle işaretlenmiş olması olabilir. Yardımcı olabilecek bir ayrıntı düzeyi anahtarı olabilir, ancak bu programa özgüdür.
evilsoup

OP, anlamsal olarak iki farklı sorun ortaya koydu: "yalnızca stderr'i error adlı bir dosyaya yönlendir" ve "Bu hata dosyasının görüntülenmesini istiyorum, başka bir şey değil hatalar." Bunun ilk kısmı kesinlikle imkansız değil.
l0b0

@ l0b0 Geri aldın. OP kesinlikle stderr'i error adında bir dosyaya yönlendirebilir. Stderr içeriği kullanıcı tarafından değil uygulama tarafından kontrol edildiğinden, Java'nın stderr olarak hangi çıktıları seçtiğini seçemez. Yapabileceği şey, stderr'ın gerçek hata mesajları için aktarıldığı dosyayı grep etmektir.
Jeight
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.