Newsgroup: it.comp.os.linux.development
Titolo: Ancora temporizzazioni in bash..

Ciao, ultimamente sono preda di un'in(sana) voglia di smanettamento che
però spesso si scontra con la mia scarsa conoscenza della shell e
quindi, eccomi qua.
Dunque, volendo temporizzare il comando read, cioè metterlo in attesa
per qualche secondo, come devo fare?
Per capirci:
....
echo -ne "premi un tasto per continuare >"
read tasto
......
adesso il read dovrebbe aspettare qualche secondo e poi procedere
comunque con l'esecuzione dello script.
E' possibile??
Con select non ho provato ma credo che sia lo stesso vero?
Ciao e grazie.
P.S.
Ringrazio ancora chi, nel precedente post mi ha suggerito l'utilizzo di
usleep che non conoscevo e fa esattamente quello di cui avevo bisogno.
-- 
*** Per E-mail rimuovi ModE dall'indirizzo ***
             *** ICQ 33500725 ***
           *** Powered by Linux ***

 attesa per qualche secondo, come devo fare?
Esempio ispirato da tomsrtbt:
#!/bin/sh
touch T
(read -p "Scrivi qualcosa: " VAR < /dev/tty > /dev/tty
echo "premuto $VAR" && rm T && kill $?) &
(sleep 5 ; kill $! ; rm T) 2>/dev/null
while [ -f T ] ; do : ; done
Non e` pulitissimo ma...,
-- 
Cinereview: Three Kings: molto bello, soprattutto come       _/Davide\_
tecnica.  Voto: 8                                            \Alberani/

 E' possibile??
man sleep
-- 
Francesco P. Lovergine  f.lovergine AT 
iesi.ba.cnr.it

 man sleep
Conosco bene (abbastanza..) sleep, so a che cosa serve e come si usa ma
questo è un caso un po' particolare e il semplice sleep non basta.
Ciao.


 while [ -f T ] ; do : ; done
Non riesco ad utilizzarlo perchè mi serve il valore di $VAR. Forse il
mio esempio era un po' troppo "esempio"...
Per capirci bene, questo è lo script in cui vorrei inserire la
temporizzazione sul read
#!/bin/bash
# VARIABILI
# lettore posta con X
postax=kmail
# lettore posta in console
posta=mutt
# Controlla posta ogni x minuti
minuti=10
range=m
tempo=$minuti$range
d=0; while [ $d = 0 ]
do
# Controlla che ci sia la connessione
if test `ps ax | grep pppd | grep -v grep | cut -b-5` &> /dev/null
then
# la connessione è OK, controlla e scarica la posta
echo -e "\nControllo email......\n"
if fetchmail -v > /dev/null 
then
/usr/bin/play /sounds/wav/logout01.wav || beep
c=0; while [ $c = 0 ]
do
echo -e "\nHAI NUOVA POSTA !!"
echo -ne "Vuoi leggerla ? [y/n] > "
read leggi    <----- qui vorrei la temporizzazione, dopo 5 sec, $leggi =
n"
case $leggi in
        y)
        if [ ${#DISPLAY} != 0 ] 
        then c=1; $postax
        echo -e "Prossimo controllo tra $tempo"; sleep $tempo
        else c=1; $posta
        echo -e "Prossimo controllo tra $tempo"; sleep $tempo
        fi
        ;;
        n)
        echo -e "Ricordati che c'è posta per te...."; sleep 1s; c=1
        echo -e "Prossimo controllo tra $tempo"; sleep $tempo; 
        ;;
        *)
        echo -e "Oooppppsss.......non ho capito bene la risposta, puoi
ripetere ?"
        sleep 2s; c=0
        ;;
 
esac
done
else
echo -e "\nSpiacente, non ci sono nuovi messaggi...\n"; sleep 2s
echo -e "Ricontrollo tra $tempo"; sleep $tempo
fi
else
echo -e "\n\aATTENZIONE!! La connessione non è attiva\
\nConnettiti e riprova.\n"; sleep 2s; d=1
fi
done
exit
.......................
Allora è possibile? Non voglio lanciare fetchmail come demone, non mi
piace e poi se non smanetto un po', non mi diverto.....
Ciao.
-- 


 Non voglio lanciare fetchmail come demone,
E` di una comodita` unica :-)
Lo puoi sempre uccidere finita la connessione con fetchmail -q


................
Ok, mi sfugge qualcosa....
....
c=0; while test $c -lt 2
do
echo -e "HAI NUOVA POSTA !!"
touch T
(read -p "Vuoi leggerla ? [y/n] > " VAR < /dev/tty > /dev/tty
&& rm T && kill $?) & 
echo -e "\n\$VAR"
(sleep 5 ; kill $!; rm T) 2>/dev/null     <---- da qui in poi, $VAR
scompare!!
echo "\n\$VAR"                            <---- di conseguenza, qui
nessun echo...     
if [ ${#VAR} != 0 ]                       <---- quindi, qui niente
"test"
then
.....
Sto faecndo una marea di prove, solo che poi la mattina mi devo
alzare....
Ciao & grazie.                                   


 alzare....
Puo` essere una idea ;-)


         return 0
Evvaaaiii! Funziona! Ho sostituito solo il return 0 con 1 (lo script non
deve terminare..) e funziona.
Solo due cosette non capisco bene, l'utilizzo di touch T e il  do : ;
done, cioè, il file T che viene creto serve solo per creare un
"condizione" (while [ -f T ]) o serve ad altro? E il do : ??? Mi sfugge,
o meglio i sono i ":" che mi sfuggono..
Ciao e grazie.


 o meglio i sono i ":" che mi sfuggono..
$ help :
:: :
    No effect; the command does nothing.  A zero exit code is returned.
Non fa niente, e` per creare un ciclo infinito di attesa.
-- 
Cinereview: Il miglio verde: ottimo; grandi interpreti.      _/Davide\_
Perche` niente nomination al buon Tom?  Voto: 9              \Alberani/

.....un sacco di cose interessanti.....
Ok, grazie.
Passo e chiudo.
Ciao.
