3.4.12 La redirezione dei comandi
Come descritto nel cap. 7, ad ogni processo viene assegnato automaticamente dal sistema un
file di input, uno di output ed uno di error.
In genere i dati di input vengono specificati sulla riga di comando della shell ed il
programma li riceve come dati di ingresso, ovvero la shell li inserisce nel suo file di
input.
Il flusso dei dati di input e di output (e di error) viene in genere definito pipeline. Per
ogni comando lanciato esiste una pipeline che riguarda i dati da esso coinvolti.
È possibile, tramite la shell, specificare un file di input, output o error diversi da quelli
standard, ovvero effettuare quella che viene dette una redirezione dei comandi.
Questo si rivela molto utile quando si devono combinare più comandi insieme. Si
potrebbe infatti desiderare dare in input ad un comando, l’output di un altro, o
ancora fare in modo che l’output di un comando venga effettuato su un file che non
sia quello relativo allo schermo. Tutto ciò può essere fatto per mezzo di opportuni
caratteri:
-
> redirezione dell’output. L’output del comando che precede il simbolo ‘>’ viene
rediretto nel file specificato subito dopo. Ad esempio il comando
creerà il file pippo nella working directory e ci scriverà tutto il suo output (che
normalmente sarebbe finito sullo schermo). Nel caso in cui tale file esista già,
questo viene svuotato completamente e quindi riempito con l’output del
comando.
-
>> redirezione dell’output in append. L’output del comando che precede la
sequenza “>>” viene rediretto nel file specificato subito dopo. Ad esempio il
comando
scriverà tutto il suo output nel file pippo (presente nella working directory). Tale
operazione non sarà distruttiva del precedente contenuto del file pippo, ma la scrittura
dell’output di ls andrà in aggiunta (append) al precedente contenuto del file. Nel caso
in cui tale file non esista, questo viene creato e quindi riempito con l’output del
comando.
-
< redirezione dell’input. Il comando che precede il simbolo ‘<’ considera il suo input il
file specificato subito dopo. Ad esempio il comando
indicherà al comando ls di utilizzare come input il file pippo;
-
2> redirezione dell’error. Analogo alla redirezione dell’output, ma redirige l’error, anziché
l’output.
-
&> redirezione sia dell’output che dell’error. Redirige sia l’output che l’error del
comando che sta a sinistra della sequenza “&>” nel file specificato subito
dopo.
-
| redirezione dell’output di un comando nell’input di un altro. Redirige l’output del
comando che precede il simbolo | nell’input del file specificato subito dopo. In questo
modo si possono concatenare più comandi in cascata, in modo che l’output dell’uno
costituisca l’input del successivo.