Determina se l'output è stdout o stderr


22

Come posso determinare se ciò che un processo sta producendo è stdout o stderr?

Risposte:


22

Ci sono solo tre modi che conosco per determinare quale programma verrà trasmesso su STDOUT e cosa su STDERR

  1. Leggi la documentazione O

  2. Sperimenta il reindirizzamento †

  3. stampa STDERR in rosso

†Per esempio:

program > program.stdout 2> program.stderr

Quindi guarda i due file di output per vedere cosa ha scritto il programma su STDOUT e cosa ha scritto su STDERR.

Invece del reindirizzamento, è possibile reindirizzare teese è necessario l'output per continuare sullo schermo e in un file. Vedi /programming//q/692000/477035


15
Di solito uso una variante dell'opzione 3: program | grep .stampa STDOUT in rosso.
Dennis,

Stampare in rosso è esattamente quello che stavo cercando. Grazie RedGrittyBrick & Dennis
Rauffle,

7

Sulla base della tua richiesta commentata:

{ { command; } 2>&3 | sed 's/^/STDOUT: /'; } 3>&1 1>&2 | sed 's/^/STDERR: /'

3
Sembra impressionante. Ma ti dispiacerebbe aggiungere le ciliegie al tuo albero e spiegare cosa sta facendo? Non tutti qui sono guru - e il tuo costrutto è piuttosto complesso;)
Izzy,

Le parentesi sono per l'ordinazione. In realtà ho ottenuto la forma esatta da I-forget-where, ma il punto è usare descrittori di file extra (oltre 1 = stdoute 2 = stderr) per prendere l'output del set interno di parentesi ed eseguire stdoutun sedcomando, mentre stderrpassa attraverso uno diverso.
zebediah49,

Wow. Non sapevo usare quei descrittori extra. Prima ero un po 'confuso (mi piace capire cosa corro - e mi sono un po' confuso con le parentesi graffe). Ma ora è chiaro - e IMHO esattamente quello che voleva l'OP. Quindi +1 da parte mia :)
Izzy,

Questo mi ha aiutato. Volevo aggiungere più dati a stderr. Questo lo fa e restituisce correttamente tutto su stdout / stderr. { { { { echo "stdout" ; echo "stderr">&2; } 2>&3; } 3>&1 1>&2 | awk '{print "ERROR:",$0}' 1>&3; } 3>&2 2>&1; }
Bryan Drewery,

0

Potresti semplicemente reindirizzare stderr su un file e se qualcosa appare in esso, proviene da stderr.

per esempio ls -a 2> ls-all.txt

se si è verificato un errore per qualsiasi motivo inviato a stderr, verrà reindirizzato a questo file.


-1

Se vuoi farlo una volta spento, reindirizza uno di loro da qualche altra parte.

Esempio, reindirizzare lo standard con >.

ls -al> ls-l.txt (qualsiasi output qui non proviene da stdout, se vedi qualcosa deve essere output stderr)

Per il reindirizzamento stderr utilizzare 2>


Il processo crea un flusso costante di output, alcuni da stdout a stderr. Voglio determinare quale è quale uscita dello schermo
Rauffle,
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.