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.