Come reindirizzare solo stderr?


13

Sto avendo dei problemi a farlo. Mi viene richiesto di eseguire un file .java compilato e reindirizzare solo stderr a un file chiamato errore. Quindi il file .java è chiamato javaProgram.java.

Questo è quello che ho provato:

java javaProgram 2> error

Tuttavia quando io

cat error

sembra che ci sia roba lì dentro, anche quando so per certo che il file .java specifico non ha errori. Sto facendo qualcosa di sbagliato? Tutto quello che voglio visualizzare questo file di errore sono errori, non altro.

Risposte:


16

Il tuo primo tentativo è stato corretto; 2>filenameè come reindirizzare stderr. È possibile che il tuo programma stia scrivendo alcuni non errori su stderr o che il programma java stia eseguendo altri programmi che producono output su stderr.


1

La semplice risposta è che non è possibile. L'errore standard viene utilizzato per la scrittura dell'output diagnostico e spetta alle applicazioni definire cosa sia l'output diagnostico / di errore. Questo è secondo lo standard POSIX .


2
Se hai intenzione di citare le specifiche POSIX, cita una sezione specifica e non l'intero documento. È enorme.
jordanm

Da quando non è possibile reindirizzare stderr su file in POSIX? Dovrai fornire un preventivo effettivo per questo.
l0b0

1
@ l0b0 non è quello che dice Jeight. Spetta alle applicazioni decidere cosa va a STDOUT e cosa va a STDERR; sarebbe del tutto possibile inserire tutto in STDOUT, per esempio, e quindi reindirizzare STDERR non avrebbe alcun effetto. Oppure, come in questo caso, è possibile (e pratica standard) inserire alcune cose che non sono strettamente errori in STDERR. L'unico modo in cui sarebbe possibile analizzare gli errori da altre diagnosi sarebbe se gli errori sono contrassegnati con "ERRORE:" o qualcosa del genere. Potrebbe esserci un interruttore di verbosità che potrebbe aiutare, ma è specifico del programma.
evilsoup,

OP ha posto due problemi semanticamente diversi: "reindirizzare solo stderr a un file chiamato errore" e "Voglio che questo file di errori sia visualizzato, non altro". La prima parte di ciò non è certamente impossibile, è il mio punto.
20

@ l0b0 Hai capito al contrario. L'OP sicuramente può reindirizzare lo stderr su un file chiamato errore. Non può scegliere ciò che Java genera come stderr perché il contenuto di stderr è controllato dall'applicazione e non dall'utente. Quello che può fare è grep il file a cui è stato passato stderr per messaggi di errore reali.
Jeight,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.