Introduzione a Unix
Indietro | Capitolo 6 Caratteristiche speciali di Unix | Avanti

# 6.2 Redirezione di file

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.

## 6.2.1 Csh

`>& `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

## 6.2.2 Sh

`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:

``m`<&-` | chiude un descrittore di file di input
`<&-` | chiude stdin(4)
``m`>&-` | chiude un descrittore di file di output
`>&-` | chiude stdout(4)

Indietro | Partenza | Avanti
Caratteristiche speciali di Unix | Risali | Altri speciali simboli di comando

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