[gull] [Vive le Shell] Une boucle qui tient compte de la fin anormale d'un prog

Jean-Claude Schopfer mad at gyrl.ch
Mon May 19 22:53:07 CEST 2003


Hello, 

Voici un petit truc en shell qui permet de sortir proprement d'une
boucle. Vous avez sûrement remarqué lorsqu'on appele un programme à
l'intérieur d'une boucle while true et que celui-ci est interrompu
par ctrl + c, que la boucle continue malgré tout et relance le
programme. Il faut appuyer plusieurs fois sur ctrl + c pour que
la boucle s'interrompe enfin. L'astuce est de remplacer la condition
true (while true=toujours vrai, donc infini) par while [ $? = 0 ]
(tant que le code de retour est vide).

La plupart des programmes, quand ils sont bien écris, renvoie un code
de retour en cas d'interruption inatendue (par ctrl + c ou par kill par
exemple)

Un exemple étant toujours meilleur qu'une longue théorie, voici une
boucle qui joue aléatoirement tous les .mp3 et .ogg se trouvant
sur votre disque et qui ont été pris en compte par updatedb.

--------------------------------------------------------------------
while [ $? = 0 ]
do
        TRACKNBR=`locate .mp3 .ogg | wc -l | sed -e '1,$s/ //g'`
        TRACKRND=`echo "$RANDOM * $TRACKNBR / 32768" | bc`
        TRACKFIL=`locate .mp3 .ogg | head -$TRACKRND | tail -1`
        mplayer "$TRACKFIL"
done
--------------------------------------------------------------------

PS : fonctionne sur la plupart des shells (bash, ksh, etc...) :)

@++
JC

-- 
Get my PGP-Key at http://jc.schopfer.ch
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 241 bytes
Desc: not available
URL: <http://forum.linux-gull.ch/pipermail/gull/attachments/20030519/8f046a4b/attachment.pgp>


More information about the gull mailing list