Salta l'introduzione Italia - Italiano
HP.com Italia Prodotti e Servizi Supporto e Drivers Soluzioni Come Acquistare
» Contatta HP
Altre opzioni
HP.com Italia
Uso di HP-UX: Server e workstation HP > Capitolo 3 Uso della shell

Comprensione di input standard, output standard ed errore standard

» 

Documentazione tecnica

Libro completo in PDF
» Feedback
Inizio contenuto

 » Sommario

 » Glossario

 » Indice

Ogni processo apre tre “file” standard: input standard (stdin), output standard (stdout), ed errore standard (stderr). I programmi li usano nel seguente modo:

  • Input standard è il luogo da cui il programma si aspetta di leggere il suo input. Per default, i processi leggono stdin dalla tastiera.

  • Output standard è il luogo in cui il programma scrive il suo output. Per default, i processi scrivono stdout sullo schermo del terminale.

  • Errore standard è il luogo in cui il programma scrive i suoi messaggi di errore. Per default, i processi scrivono stderr sullo schermo del terminale.

La figura di seguito illustra il rapporto tra questi file ed il processo.

Figura 3-1 Input standard, output standard ed errore standard

Input standard, output standard ed errore standard

Scrittura dell’output standard su un file

La shell consente di ridirezionare l’output standard di un processo dallo schermo (il default) ad un file. Ridirezionando l’output si ha la possibilità di memorizzare il testo creato da un comando in un file; rappresenta inoltre un modo comodo per selezionare i file o i dispositivi (come le stampanti) che usa un programma.

Nella sua forma più semplice, la sintassi del comando è la seguente:

stdout

comando > outfile

dove comando è il comando il cui output è ridirezionato e outfile è il nome del file su cui il processo scrive il suo output standard. Se il file di output esiste, i suoi contenuti precedenti andranno perduti. Se il file non esiste, sarà creato.

Per aggiungere l’output ad un file esistente, usare due segni di ‘maggiore di’ (>>) che puntano verso il file da aggiungere.

Questa figura illustra dove vanno stdin, stdout e stderr quando si ridireziona l’output verso un file.

Figura 3-2 Input, output ed errore standard quando si ridireziona l’output

Input, output ed errore standard quando si ridireziona l’output

L’esempio di seguito illustra il ridirezionamento dell’output usando il comando who, che visualizza una lista di utenti attualmente collegati al sistema. Invece di visualizzare gli utenti sullo schermo del terminale, l’output è ridirezionato al file whoison.

who(1)

$ who > whoison  Ridirigere l’output a whoison.
$ more whoison Visualizzare i contenuti di whoison.
pat    console  Oct 9 08:50  
terry tty01    Oct  9 11:57  
kim    tty02    Oct 9 08:13  

Utilizzo dei file per l’input standard

La shell consente di ridirezionare l’input standard di un processo in modo che l’input sia letto da un file invece che dalla tastiera. Per ridirigere l’input di un processo, separare il comando ed il nome del file di input con un segno di ‘minore di’ (<) orientato verso il nome del comando. È possibile usare il ridirezionamento dell’input con qualsiasi comando che accetti l’input da stdin (tastiera).

Nella sua forma più semplice, la sintassi del comando è la seguente:

stdin

comando < infile

dove comando è il comando il cui input è ridirezionato e infile è il nome del file da cui il processo legge l’input standard. Perché il ridirezionamento riesca, occorre che il file esista.

La figura di seguito illustra dove vanno stdin, stdout e stderr quando si ridireziona l’input da un file.

Figura 3-3 Input, output ed errore standard quando si ridireziona l’input

Input, output ed errore standard quando si ridireziona l’input

Nel seguente esempio, l’output standard dal comando who è ridirezionato ad un file denominato savewho. Poi, il comando more visualizza i contenuti di savewho. Infine, si ridireziona l’input standard per il comando wc (word count) perchè provenga dal file savewho:

Uso di “>”

$ who > savewho Ridirigere l’output su savewho
$ more savewho Visualizzare i contenuti di savewho
pat   console Oct 9 08:50  
terry tty01   Oct 9 11:57  
kim   tty02   Oct 9 08:13  

Uso di “<“

$ wc -l < savewho Ridirigere l’input da savewho
4 La risposta

Nell’esempio precedente, il comando wc con l’opzione -l conta il numero di righe contenute nel file di input. Poichè l’input è ridirezionato da savewho, tale numero è uguale al numero di utenti collegati al sistema quando si è eseguito il comando who.

Ridirezionamento sia dell’input standard sia dell’output standard

È possibile ridirigere sia l’input standard sia l’output standard di un unico comando. Tuttavia, non usare lo stesso nome file per l’input standard e l’output standard, poichè i contenuti originali del file di input sono andati perduti.

La seguente figura illustra dove stdin, stdout e stderr sono diretti quando sia l’output sia l’input sono diretti da e verso dei file.

Figura 3-4 Ridirezionamento sia dell’input sia dell’output

Ridirezionamento sia dell’input sia dell’output

Uso dell’input standard e dell’output standard di default

Il seguente esempio usa il comando sort per ordinare il testo digitato sulla tastiera. Digitando CTRL-D si termina l’input standard. L’output standard compare visualizzato sullo schermo del terminale come segue:

sort(1)
$ sort
muffy           
happy           
bumpy           
CTRL-D          Fine dell’input standard.
bumpy           
happy           
muffy           Fine dell’output standard.

Ridirezionamento dell’input standard

Nell’esempio che segue, si ridirige l’input:

$ more socks   Visualizzare i contenuti di socks.
polka dot      
argyle         
plaid          
$ sort < socks  Ridirigere l’input da socks ed ordinare i contenuti.
argyle
plaid          
polka dot      

Nell’esempio precedente, il comando sort usa un file denominato socks come input. L’output standard compare visualizzato sullo schermo del terminale.

Uso del ridirezionamento sia dell’input standard sia dell’output standard

L’esempio successivo combina il ridirezionamento sia dell’input sia dell’output:

$ sort < socks > sortsocks	Usare il ridirezionamento sia dell’input sia dell’output.
$ more sortsocks       Visualizzare i contenuti di sortsocks.
argyle                     
plaid
polka dot

In questo esempio, il comando sort legge l’input dal file socks e legge l’output sul file sortsocks; così, l’output standard (a differenza dei primi due esempi) non compare visualizzato sullo schermo.

Comando di collegamento di output ed input mediante ‘pipe’

La shell consente di connettere due o più processi in modo da utilizzare l’output standard di un processo come input standard di un altro processo. La connessione che unisce i processi è un pipe. Per connettere mediante pipe l’output di un processo in un altro, occorre separare i comandi con una barra verticale (|). La sintassi generale per un pipe è la seguente:

comando1 | comando2

dove comando1 è il comando il cui output standard è ridirezionato o connesso mediante pipe ad un altro comando e comando2 è il comando il cui input standard legge l’output del comando precedente. È possibile combinare due o più comandi in un unico pipeline. Ogni comando seguente ha il suo output connesso mediante pipe come input del comando successivo sulla riga di comando:

comando1 | comando2 | ... | comandoN

Nel seguente esempio, l’output dal comando who è nuovamente memorizzato nel file savewho. Poi, il file savewho è usato come input sul comando wc:

wc(1)

$ who > savewho     Ridirigere l’output di who al file savewho.
$ wc -l < savewho Il file savewho è l’input sul comando wc.
4    Risultato campione:

Con un pipeline, questi due comandi diventano uno:

$ who | wc -l
4

Come illustrato da questo esempio, usando i pipe si elimina la necessità di avere dei file intermedi temporanei. Invece, l’output standard proveniente dal primo comando è inviato direttamente al secondo comando come input standard di quest’ultimo.

Uso del comando tee con i pipe

Il comando tee consente di deviare una copia dei dati che transitano tra i comandi ad un file senza modificare le modalità di funzionamento del pipeline. L’esempio che segue usa il comando who per stabilire chi si trova sul sistema. Nell’esempio, illustrato ulteriormente nella figura che segue, l’output proveniente da who è connesso mediante pipe nel comando tee, che salva una copia dell’output nel file savewho e passa l’output invariato al comando wc:

tee(1)
$ who | tee savewho | wc -l
4
$ more savewho
pat        console      Oct  9 08:50
terry      tty01        Oct  9 11:57
kim        tty02        Oct  9 08:13

Figura 3-5 Input standard ed output standard con pipe e comando tee

Input standard ed output standard con pipe e comando tee

Per ulteriori informazioni...

HP-UX fornisce programmi filtro usati nei pipeline. Tali programmi accettano input di testo, trasformando il testo in qualche modo e producono del testo come output. I comandi filtro includono adjust, awk, more, cut, grep, head, more, pr, rev, sed, sort, spell e tail. Per informazioni su questi comandi, consultare le manpage.

Versione stampabile
Informativa sulla privacy Usando questo sito si accettano le sue condizioni
© Hewlett-Packard Development Company, L.P.