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.

}<br />

Capitolo 9. Variabili riviste<br />

trap Int14Vettore 14 # Interrupt del timer (14) mo<strong>di</strong>ficato allo scopo.<br />

echo "Qual’è la tua verdura preferita? "<br />

AvvioTimer<br />

read risposta<br />

VisualizzaRisposta<br />

# Ammettiamolo, questa è un’implementazione tortuosa per temporizzare<br />

#+ l’input, comunque l’opzione "-t" <strong>di</strong> "read" semplifica il compito.<br />

# Ve<strong>di</strong> "t-out.sh" più sotto.<br />

# Se desiderate qualcosa <strong>di</strong> più elegante... prendete in considerazione<br />

#+ la possibilità <strong>di</strong> scrivere l’applicazione in C o C++,<br />

#+ utilizzando le funzioni <strong>di</strong> libreria appropriate, come ’alarm’ e ’setitimer’.<br />

exit 0<br />

Un’alternativa è l’utilizzo <strong>di</strong> stty.<br />

Esempio 9-3. Input temporizzato, un ulteriore esempio<br />

#!/bin/bash<br />

# timeout.sh<br />

# Scritto da Stephane Chazelas<br />

#+ e mo<strong>di</strong>ficato dall’autore del libro.<br />

INTERVALLO=5 # intervallo <strong>di</strong> timeout<br />

leggi_temporizzazione() {<br />

timeout=$1<br />

nomevar=$2<br />

precedenti_impostazioni_tty=‘stty -g‘<br />

stty -icanon min 0 time ${timeout}0<br />

eval read $nomevar # o semplicemente read $nomevar<br />

stty "$precedenti_impostazioni_tty"<br />

# Ve<strong>di</strong> la pagina <strong>di</strong> manuale <strong>di</strong> "stty".<br />

}<br />

echo; echo -n "Come ti chiami? Presto! "<br />

leggi_temporizzazione $INTERVALLO nome<br />

# Questo potrebbe non funzionare su tutti i tipi <strong>di</strong> terminale.<br />

# Il timeout massimo, infatti, <strong>di</strong>pende dallo specifico terminale.<br />

#+ (spesso è <strong>di</strong> 25.5 secon<strong>di</strong>).<br />

echo<br />

if [ ! -z "$nome" ] # se il nome è stato immesso prima del timeout...<br />

then<br />

108

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

Saved successfully!

Ooh no, something went wrong!