Redirezionare output di programmi


Fin dalle prime (ma non le primissime) versioni di Unix è stata introdotta nella shell la possibilità di redirezionare l'output di programmi (i dati che generano) ad altri programmi e di compiere analoghe operazioni con l'input e i messaggi di errore.
Questa possibilità, essendo valida per tutti i programmi e applicabile a tutti i file e oggetti del file system, permette una flessibilità enorme ed è particolarmente utile in script shell. La shell gestisce la comunicazione con ogni programma lanciato tramite 3 file descrittori:
standard input (stdin - file descriptor 0)
E' il canale attraverso il quale il programma riceve i dati di ingresso, generalmente la tastiera.
standard output (stdout - file descriptor 1)
E' il canale di uscita del risultato dell'elaborazione del programma, di solito il video.
standard error (stderr - file descriptor 2)
E' dove il programma stampa eventuali errori durante l'esecuzione, di solito il video.
Molti comandi UNIX assumono che l'ingresso dei dati avvenga (o possa avvenire) da standard input e l'uscita avvenga su standard output. E' possibile concatenare più programmi fra loro e fare in modo che lo standard output di uno diventi lo standard input di un altro. Per farlo si utilizza il carattere | chiamato pipe.
E' inoltre possibile redirezionare stdin, stdout e stderr su un file tramite gli operatori di redirezionamento:
> redirige lo standard output di un comando su un file o dispositivo
>> redirige l'output di un comando su un file o dispositivo ma se il file esiste già i dati vengono aggiunti alla fine del file. Se il file non esiste viene creato
redirige lo standard input da un file o dispositivo
2> redirige lo standard error di un comando su un file o dispositivo

progr_prova.sh > progr_prova.out 2>&1
Il comando > salva l'output dello script sh nel file progr_prova.out.
Il camando 2>&1 salva lo stderr nel file progr_prova.out.

| operatore pipe, concatena standard output e standard input di due programmi

Di seguito un esempio utilizzando il comando cat. Tramite l'uso dell'operatore di redirezione >> può essre utilizzato come una sorta di semplice editor multilinea.

root@Joker:~#cat >> /etc/hosts
192.168.0.15 ftp.joker.net
192.168.0.20 ftp.enigma.net
^D

Due nuove linee vengono accodate al file hosts, terminando l'input con contro+D


root@Joker:~#tail –f prova.log > prova1.log
^C

Viene creato un nuovo file prova1.log e dopo il ^C viene interrotto il comando.

Post popolari in questo blog

Create e Drop Pluggable Database

ORA-12154: TNS: il listener non è attualmente a conoscenza del servizio richiesto nel descrittore di connessione