CANALI DI I/O

Introduzione

Esistono tre canali di Input/Output, ad ognuno è assegnato un numero di riferimento (vedremo più avanti il loro uso)

0 - STDIN (Standard Input) - Generalmente la tastiera

1 - STDOUT (Standard Output) - Generalmente la console (video)

2 - STDERR (Standars Error) - Generalmente la console (video)

Ogni comando o programma ha i sui standard per i canali di I/O, comunque tutti e tre possono essere redirezionati.
Ad esempio un comando può prendere STDIN da un file, mandare STDOUT alla stampante e STDERR in un altro file.

Redirezione

< - STDIN

> - STDOUT

n> - Redirige n (numero identificativo del canale) verso lo STDOUT

>> - (append) Aggiunge lo STOUT in fondo al file

& - Concatena

&> - Redirige sia lo STDOUT che lo STDERR

tee - Sdoppia lo STDOUT

| - (pipe - tubo) Redirige lo STDOUT verso lo STDIN del comando in pipe

:: Esempi

# ls -la > lista Scrive nel file lista il risultato del comando ls -la
# sort -n < lista Stampa a video gli elementi numerici (-n) ordinati (sort) del file lista
# sort -n < lista > lista_ordinata Il risultato del comando sort precedente viene salvato sul file lista_ordinata e non stampato a video
# echo stringa >> testo Scrive stringa in fondo al file testo (in una nuova riga)
# sort -n lista_inesistente 2>&1 | tee file.err 2>&1 redirige lo STDERR del comando sort verso lo STDOUT (ricordarsi i numeri 0/1/2 assegnati a STDIN/STDOUT/STDERR all'inizio). Questo STDOUT diventa STDIN del comando sucessivo (tee) grazie alla pipe. Infine il comando tee "sdoppia" lo STDIN verso due STDOUT (scrive nel file file.err e stampa a video)
# cat file_inesistente 2> file.err Scrive in file.err lo STDERR
# cat file_inesistente &> file.err Scrive in file.err sia lo STDOUT che lo STDERR