All'interno di un sistema UNIX sono presenti e sempre disponibili tre file legati alle funzioni di raccolta degli input e cessione degli output:
- stdin, detto anche standard input, cioè il file da cui generalmente un applicativo acquisisce i propri input;
- stdout, detto anche standard output, cioè il file su cui generalmente un applicativo genera i propri output;
- stderr, detto anche standard error, cioè il file a cui generalmente un applicativo spedisce gli eventuali messaggi di errore.
L'azione svolta da e su questi file riguarda tutti gli applicativi presenti all'interno del sistema operativo e stanno alla base di tutte le operazioni che l'utente svolge attraverso il software disponibile.
Per fare un esempio, un input può essere generato dalla digitazione di un'istruzione attraverso la tastiera, oppure tramite l'esecuzione di un file o da un comando lanciato dall'utente.
Nello stesso modo, un output può concretizzarsi nella stampa a video di una stringa o di un grafico visualizzabile dal monitor, nella creazione di un file a seguito di un comando o all'attivazione di un determinato processo.
Quando viene eseguito un comando, non è necessario che quest'ultimo sia a conoscenza del tipo o della provenienza dell'input nè della destinazione dell'output, sarà invece il sistema stesso a stabilre i diversi collegamenti sulla base delle istruzioni digitate dall'utente.
La
Shell di
UNIX è perfettamente in grado di gestire gli standard input e output così da specificare la provenienza dell'input e la destinazione dell'output. Facciamo un esempio:
/home/perfavorenonpippo> comando > output
In questo caso, l'output generato dal comando viene reindirizzato all'output, se quest'ultimo non esiste allora verrà creato, diversamente verrà sovrascritto (azione di
reindirizzamento).
Per evitare la sovrascrittura del file di output, sarà necessario sostituire l'operatore "
>" con "
>>", in questo modo il risultato del comando verrà semplicemente "appeso" allo standard di output
Un'altro caso da analizzare è quello relativo all'operatore
pipe o "
|" (come in
less |more):
/home/perfavorenonpippo> comando1 | comando2
In pratica
pipe consente di spedire l'output del primo comando all'input del secondo comando, con
less |more, ad esempio, il primo comando apre un file per la lettura, il secondo raccoglie l'output del primo comando e accoda il suo output, cioè l'impaginazione dei contenuti del file aperto.
stderr, lo
standard error, viene utilizzato per la visualizzazione di notifiche d'errore; generalmente esse compaiono sul monitor ma possono in ogni caso subire un reindirizzamento.
Riprendendo l'operatore "
>", possiamo reindirizzare gli
standard output ed
error verso un medesimo file; oppure, è spossibile separare i due standard in questo modo:
/home/perfavorenonpippo> ( commando > output ) >& error
Attenzione: questo articolo è stato concesso in esclusiva per la pubblicazione a
Mrwebmaster.it; ne è vietata la riproduzione,
anche parziale, senza l'esplicito consenso dell'autore e della redazione di
Mrwebmaster.it.