2013-03-28 12 views
5

tee legge dallo standard input e scrive sullo standard output e su un file.tee in un file compresso

some_command |& tee log 

E 'possibile per il tee scrivere in un file compresso?

some_command |& tee -some_option log.bz2 

Se il tee non può farlo, c'è qualche altro comando?

posso reindirizzare l'output in un file compresso con

some_command |& bzip2 > log.bz2 

Ma con questo comando, l'output sullo standard output è mancante.

risposta

4

Se sei OK avere l'output su stderr, è possibile reindirizzare esso:

some_command | tee /dev/stderr | bzip2 > log.bz2 

Questa Tees l'uscita sia stdout e stderr (| tee /dev/stderr). Poi tubi lo stdout a bzip2 (| bzip2 > log.bz2)

+0

L'ultimo '2> & 1' significa che tutti i messaggi di errore generati da' bzip2' vengono scritti nel suo file di output, 'log.bz2'. Abbandona semplicemente il reindirizzamento e menzionalo e sarai in affari. –

+0

Hmm, buona chiamata. – craig65535

4

Se la shell è bash (versione 4.x), avete 'process substitution', e si può usare:

some_command 2>&1 | tee >(bzip2 -c > log.bz2) 

Questo reindirizza standard error e standard output a tee (come lo fa |&, ma preferisco la notazione classica). La copia dell'output di tee viene inviata a un processo anziché a un file; il processo è bzip2 -c > log.bz2 che scrive il suo input standard in formato compresso sul suo output standard. L'altra copia (non compressa) dell'output passa direttamente allo standard output, ovviamente.