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.
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:
n>&m | redirige il descrittore di file
n sul descrittore di file
m |
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
<questions@FreeBSD.org>.
Per domande su questa documentazione, invia una e-mail a
<doc@FreeBSD.org>.