GNU/Linux >> Linux Esercitazione >  >> Linux

Mostra solo Stderr sullo schermo ma scrivi sia Stdout che Stderr su file?

Come posso usare BASH magic per ottenere questo risultato?
Voglio vedere solo l'output stderr sullo schermo,
ma voglio che sia stdout che stderr siano scritti su un file.

Chiarimento:
Voglio che sia stdout che stderr finiscano nello stesso file. Nell'ordine in cui accadono.
Sfortunatamente nessuna delle seguenti risposte lo fa.

Risposta accettata:

Anche senza alcun reindirizzamento, o con nient'altro che >logfile 2>&1 , non è garantito che visualizzi l'output in ordine di generazione.

Per cominciare, lo stdout dall'applicazione sarà bufferizzato in linea (su tty) o bufferizzato (su una pipeline) ma stderr non è bufferizzato, quindi le relazioni tra l'ordine di output sono interrotte per quanto riguarda un lettore. Le fasi successive di qualsiasi pipeline che potresti inventare non otterranno l'accesso deterministicamente ordinato ai due flussi (sono concettualmente cose che accadono in parallelo e sei sempre soggetto allo scheduler - se nel momento in cui il tuo lettore ottiene una fetta lo scrittore ha già scritto su entrambe le pipe, non puoi dire quale sia arrivato prima).

"[L]'ordine in cui accadono" è noto solo all'applicazione. L'ordinamento dell'output su stdout/stderr è un problema ben noto, forse classico.


Linux
  1. Come reindirizzare l'output su un file e Stdout in Linux

  2. Come reindirizzare solo Stderr?

  3. È possibile che il descrittore di file linux 0 1 2 non sia per stdin, stdout e stderr?

  4. Determina se l'output è stdout o stderr

  5. bash:reindirizza stderr al file e stdout + stderr allo schermo

Bash:Scrivi su file

Come reindirizzare stderr a stdout in Bash

Confuso su stdin, stdout e stderr?

Come reindirizzare stderr e stdout a file diversi nella stessa riga nello script?

Come limitare l'output di ls per mostrare solo nome file, data e dimensione?

Acquisizione di STDERR e STDOUT da archiviare utilizzando tee