11.04.2013 Views

Guida avanzata di scripting Bash - Portale Posta DMI

Guida avanzata di scripting Bash - Portale Posta DMI

Guida avanzata di scripting Bash - Portale Posta DMI

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

Capitolo 16. Re<strong>di</strong>rezione I/O<br />

In modo predefinito, ci sono sempre tre “file” aperti: lo st<strong>di</strong>n (la tastiera), lo stdout (lo schermo) e lo<br />

stderr (la visualizzazione a schermo dei messaggi d’errore). Questi, e qualsiasi altro file aperto,<br />

possono essere re<strong>di</strong>retti. Re<strong>di</strong>rezione significa semplicemente catturare l’output <strong>di</strong> un file, <strong>di</strong> un<br />

comando, <strong>di</strong> un programma, <strong>di</strong> uno script e persino <strong>di</strong> un blocco <strong>di</strong> co<strong>di</strong>ce presente in uno script (ve<strong>di</strong><br />

Esempio 3-1 e Esempio 3-2), ed inviarlo come input ad un altro file, comando, programma o script.<br />

Ad ogni file aperto viene assegnato un descrittore <strong>di</strong> file. 1 I descrittori <strong>di</strong> file per st<strong>di</strong>n, stdout e<br />

stderr sono, rispettivamente, 0, 1 e 2. Per aprire ulteriori file rimangono i descrittori dal 3 al 9. Talvolta<br />

è utile assegnare uno <strong>di</strong> questi descrittori <strong>di</strong> file ad<strong>di</strong>zionali allo st<strong>di</strong>n, stdout o stderr come<br />

duplicato temporaneo. 2 Questo semplifica il ripristino ai valori normali dopo una re<strong>di</strong>rezione complessa<br />

(ve<strong>di</strong> Esempio 16-1).<br />

OUTPUT_COMANDO ><br />

# Re<strong>di</strong>rige lo stdout in un file.<br />

# Crea il file se non è presente, in caso contrario lo sovrascrive.<br />

ls -lR > <strong>di</strong>r-albero.list<br />

# Crea un file contente l’elenco dell’albero delle <strong>di</strong>rectory.<br />

: > nomefile<br />

# Il > svuota il file "nomefile", lo riduce a <strong>di</strong>mensione zero.<br />

# Se il file non è presente, ne crea uno vuoto (come con ’touch’).<br />

# I : servono da segnaposto e non producono alcun output.<br />

> nomefile<br />

# Il > svuota il file "nomefile", lo riduce a <strong>di</strong>mensione zero.<br />

# Se il file non è presente, ne crea uno vuoto (come con ’touch’).<br />

# (Stesso risultato <strong>di</strong> ": >", visto prima, ma questo, con alcune<br />

#+ shell, non funziona.)<br />

OUTPUT_COMANDO >><br />

# Re<strong>di</strong>rige lo stdout in un file.<br />

# Crea il file se non è presente, in caso contrario accoda l’output.<br />

# Coman<strong>di</strong> <strong>di</strong> re<strong>di</strong>rezione <strong>di</strong> riga singola<br />

#+ (hanno effetto solo sulla riga in cui si trovano):<br />

#--------------------------------------------------------------------<br />

1>nomefile<br />

# Re<strong>di</strong>rige lo stdout nel file "nomefile".<br />

1>>nomefile<br />

# Re<strong>di</strong>rige e accoda lo stdout nel file "nomefile".<br />

2>nomefile<br />

394

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!