La redirezione dell'output prende l'output di un comando e lo posiziona nel file specificato. La redirezione dell'input legge il file specificato come input per un comando. La tabella che segue sintetizza le possibili modalità di redirezione.
Tabella 6-1. Redirezione di file
SIMBOLO | REDIREZIONE |
---|---|
> | redirezione dell'output |
>! | come sopra, ma non tiene conto dell'opzione noclobber per csh(1) |
>> | appende l'output |
>>! | come sopra, ma non tiene conto dell'opzione noclobber su csh(1) e crea il file se non esiste |
| | incanala (pipe) l'output nell'input di un altro comando |
< | redirezione dell'input |
<<Stringa | legge da standard input fino a quando incontra una linea contenente solo la parola Stringa. Anche conosciuto come here document (vedere il Capitolo 9) |
<<\Stringa | come sopra, ma le sostituzioni di shell non sono permesse |
Un esempio di redirezione dell'output è:
cat file1 file2 > file3
Il precedente comando concatena file1 e file2 e redirige (manda) l'output in file3. Se file3 non esiste, viene creato. Se esiste, verrà troncato a lunghezza zero prima che il nuovo contenuto sia inserito, oppure, se l'opzione noclobber della shell csh(1) è abilitata, il comando verrà rifiutato (vedere la shell csh(1) nel Capitolo 5). I file originali file1 e file2 rimarranno come erano prima dell'esecuzione del comando, ossia due entità separate.
L'output viene appeso a un file con la forma:
cat file1 >> file2
Questo comando appende il contenuto di file1 alla fine dell'esistente file2 (file2 non viene soprascritto).
L'input è rediretto (preso) da un file con la forma:
programma < file
Questo comando prende l'input per il programma da file.
Per incanalare (pipe) l'output di un programma nell'input di un altro programma si usa la forma:
comando|comando
Questo comando assegna l'output del primo comando all'input del secondo comando.
>& file | redirige stdout(4) e stderr(4) in file |
>>& file | appende stdout(4) e stderr(4) in file |
|& comando | crea una pipe tra stdout(4)-stderr(4) e il comando |
Per redirigere stdout(4) e stderr(4) in due file separati si deve prima redirigere stdout(4) in una sotto-shell, così:
% (comando > out_file) >& err_file
2> file | redirige stderr(4) in file |
> file 2>&1 | redirige stdout(4) e stderr(4) in file |
>> file 2>&1 | appende stdout(4) e stderr(4) in file |
2>&1 | comando | crea una pipe tra stdout(4)-stderr(4) e il comando |
Per redirigere stdout(4) e stderr(4) in due file separati si può fare:
$ comando 1> out_file 2> err_file
oppure, data la redirezione di default per stdout(4):
$ comando > out_file 2> err_file
Con la shell Bourne si possono specificare altri descrittori di file (da 3 a 9) e redirigere l'output attraverso questi. Questo può essere fatto con la forma:
Questo meccanismo viene utilizzato per mandare stderr(4) nello stesso posto di stdout(4), 2>&1, quando si vuole avere i messaggi di errore e i normali messaggi in un file piuttosto che sul terminale. Se si vuole che solamente i messaggi di errore vadano nel file, si può usare un descrittore di file di supporto, 3. Si redirige prima 3 su 2, quindi 2 su 1 e in fine si redirige 1 su 3.
$ (comando 3>&2 2>&1 1>&3) > file
Questo manda stderr(4) in 1 e stdout(4) in 3 che è rediretto su 2. In questo modo, in effetti, si ribaltano i normali significati dei descrittori di file 1 e 2. Si può sperimentare tutto questo con l'esempio seguente:
$ (cat file 3>&2 2>&1 1>&3) > errfile
Quindi se file è letto, l'informazione è scartata dall'output del comando, ma se file non può essere letto, i messaggi di errore sono messi nel file errfile per usi futuri.
I descrittori di file che sono stati creati possono essere chiusi con:
Questo, ed altri documenti, possono essere scaricati da ftp://ftp.FreeBSD.org/pub/FreeBSD/doc/.
Per domande su FreeBSD, leggi la documentazione prima di contattare <[email protected]>.
Per domande su questa documentazione, invia una e-mail a <[email protected]>.