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.
< - 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
| # 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 |