bloquer/vider stdin

Le
Benoit Izac
Bonjour,

Soit ce petit script pour faire le ménage dans des documents pdf :

#!/bin/sh
for f in *.pdf; do
xpdf "$f"
printf "delete $f? "
read d
case $d in
"y"|"Y") rm -- "$f" ;;
esac
done

Le problème est que de temps en temps, je tape « q » pour quitter xpdf
mais le focus est sur la fenêtre shell dans laquelle j'ai lancé le
script. Du coup « read d » prend ce « q » et le case fait pas ce que je
souhaite.

Comment faire pour vider stdin avant le « printf "delete $f? " » ?

Comment bloquer l'entrée standard pendant le « xpdf "$f" » ?

--
Benoit Izac
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Olivier Miakinen
Le #773995

#!/bin/sh
for f in *.pdf; do
xpdf "$f"
printf "delete $f? "
read d
case $d in
"y"|"Y") rm -- "$f" ;;
esac
done

Le problème est que de temps en temps, je tape « q » pour quitter xpdf
mais le focus est sur la fenêtre shell dans laquelle j'ai lancé le
script. Du coup « read d » prend ce « q » et le case fait pas ce que je
souhaite.


Déjà, un contournement serait de faire une boucle imbriquée, qui repose
la question tant que la réponse est différente de "y"|"Y" (réponses
positives) et de ""|"n"|"N" (réponses négatives, un simple RETURN
suffisant à passer à la suite).

Comment faire pour vider stdin avant le « printf "delete $f? " » ?


C'est probablement de ce côté qu'il faut chercher, si le contournement
ne te convient pas.

Comment bloquer l'entrée standard pendant le « xpdf "$f" » ?


Je ne pense pas que ce soit possible ou souhaitable.

Benoit Izac
Le #773994
Bonjour,

le 15/10/2007 à 12:12, Olivier Miakinen a écrit dans le message

#!/bin/sh
for f in *.pdf; do
xpdf "$f"
printf "delete $f? "
read d
case $d in
"y"|"Y") rm -- "$f" ;;
esac
done

Le problème est que de temps en temps, je tape « q » pour quitter
xpdf mais le focus est sur la fenêtre shell dans laquelle j'ai lancé
le script. Du coup « read d » prend ce « q » et le case fait pas ce
que je souhaite.


Déjà, un contournement serait de faire une boucle imbriquée, qui
repose la question tant que la réponse est différente de "y"|"Y"
(réponses positives) et de ""|"n"|"N" (réponses négatives, un simple
RETURN suffisant à passer à la suite).


Exact, mais si je pose la question, c'est plus pour assouvir ma
curiosité qu'un réel besoin.

Comment faire pour vider stdin avant le « printf "delete $f? " » ?


C'est probablement de ce côté qu'il faut chercher, si le contournement
ne te convient pas.


Avec un petit programme en C et O_NONBLOCK, je pense que ça doit se
faire. Mais je souhaiterais trouver une solution plus réutilisable.

Comment bloquer l'entrée standard pendant le « xpdf "$f" » ?


Je ne pense pas que ce soit possible ou souhaitable.


Je pensais que je pourrais le faire avec stty mais je n'ai pas réussi.

--
Benoit Izac


Olivier Miakinen
Le #773745

Déjà, un contournement serait de faire une boucle imbriquée, qui
repose la question tant que la réponse est différente de "y"|"Y"
(réponses positives) et de ""|"n"|"N" (réponses négatives, un simple
RETURN suffisant à passer à la suite).


Exact, mais si je pose la question, c'est plus pour assouvir ma
curiosité qu'un réel besoin.


Je suis aussi intéressé par la solution, si elle existe. En gros il
faudrait pouvoir faire un read non bloquant (et boucler dessus tant
qu'il y a des choses à lire).


Publicité
Poster une réponse
Anonyme