Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

bloquer/vider stdin

3 réponses
Avatar
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

3 réponses

Avatar
Olivier Miakinen

#!/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.

Avatar
Benoit Izac
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


Avatar
Olivier Miakinen

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).