giovedì 20 dicembre 2007

Input singolo Output multipli - tee

A dire il vero non so se questo sia un comando "nativo" di Unix o un Shell-Tool introdotto dalla GNU. In ogni caso io mi riferisco, in queste righe, alla versione GNU di tee. L'idea che sta alla base di tee è semplice, come la sua realizzazione, ma molto efficace: Copiare lo standard-input sullo standard-output e su altri files contemporaneamente. Come molti tool, e filtri, per shell tee ha un senso pratico se lo si usa con redirezione e pipe.

Possiamo quindi considerare tee come una "multipla" o qualcosa di simile... magari un giunto a T! Con un poco di pratica ci si capisce meglio:
:~/esempi$ ls
:~/esempi$ tee pluto.txt
Io scrivo e tee ripete allo standard-output
Io scrivo e tee ripete allo standard-output
Esattamente come fà cat a prima vista
Esattamente come fà cat a prima vista
Premo ctrl+d (EOF) per terminare tee
Premo ctrl+d (EOF) per terminare tee
mesillo@stellascura:~/esempi$ ls
pluto.txt
:~/esempi$ cat pluto.txt
Io scrivo e tee ripete allo standard-output
Esattamente come fà cat a prima vista
Premo ctrl+d (EOF) per terminare tee
:~/esempi$
Come si vede dal primo ls la directory esempi è vuota. Avviamo tee, $tee pluto.txt, e, al suo termine, troviamo un file (pluto.txt appunto) contenete le righe che avevamo digitato. tee è in grado di copiare lo standard-input su più files, basta specificare una lista di nomi/path alla riga di comando:
$ tee file1 file2 file3 ...Ovviamente tutti i files avranno lo stesso contenuto.
Le due opzioni di maggior rilievo, almeno a parer mio, di tee sono:
  • -a : output su file in modalità append, gli eventuali dati già presenti non vengono cancellati.
  • -i : ignora i SIGINT (ctrl+c) che eventualmente dovesse ricevere. Utile nell'uso con certi programmi.
Un esempio un poco più pratico: voglio salvare l'output di dmesg in un file e leggere solo le prime 10 righe allo standard-output immediatamente.
:~/esempi$ dmesg | tee dmesg_file.txt | head
Vedrete apparire subito le prime 10 righe, dei messaggi di avvio del Kernel, mentre nel file, dmesg_file.txt, saranno presenti tutte quante.

Nessun commento:

Posta un commento