6.2. Redirezione di file
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 | Risali | Avanti
Capitolo 6. Caratteristiche speciali di Unix | Partenza | 6.3. 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>.