Dans un script, je voudrais lire une sortie de processus ligne par ligne et obtenir une confirmation de l’utilisateur. Jusqu’ici j’ai fait ceci:
mycommand-outputpiped | while (read line) do read line #dostuff read confirm #oops -> this read the next item from the pipe, not the keyboard done
J’ai donc essayé d’append:
read confirm < /dev/stdin
Mais cela n’a pas changé la chose, il lit toujours la ligne suivante du tuyau … Comment dois-je gérer cela?
Les deux commandes de lecture sont read
partir du stream d’entrée standard hérité de la boucle while. Ce qui suit devrait fonctionner; votre seconde lecture doit lire directement depuis le terminal, pas /dev/stdin
(qui est le tube).
mycommand-outputpiped | while read line do # do stuff read confirm < /dev/tty done
Notez qu'il n'y en a qu'une read
, dans la condition while
, et qu'elle ne soit pas entre parenthèses (ce qui créerait un sous-shell, et line
ne serait disponible que dans ce sous-shell, pas dans le corps de la boucle).