Klasse, so funktioniert es. Auch bei einem Amoklauf auf <Enter> zeigt das Script jetzt das gewünschte Verhalten.
Kannst du mich mal schlau machen, wie der read Befehl genau arbeitet? Warum benötigt man die while-Schleife?
Beipspielsweise folgende Abwandlung:
Code: Alles auswählen
#!/bin/bash
i=0
while [[ ! $test = q ]]; do
while read -e -s -t 5 trash;
do
i=$[i+1]
echo $i
done
read -p "INPUT:" -s -n 1 test
echo "danke"
sleep 6
done
1) Das Script startet und wartet erst einmal 5 Sekunden, bis automatisch der Tastaturpuffer nach $trash geschrieben wird.
2) Input erscheint, das Script wartet auf eine einzige Taste, sagt "danke" und schläft dann 6 Sekunden.
3) Während dieser 6 Sekunden nutze ich die Zeit und kloppe wie ein Blöder 15x auf Enter.
Jetzt würde ich annehmen, daß read nach seinen 5 Sekunden entweder nur die letzte Eingabe ausliest und dann $i ausgibt, in dem Fall also 1, oder daß es nach jeweils 5 Sekunden eines der <Enter> ausliest, somit also erst nach 75 Sekunden fertig wäre.
Stattdessen erhalte ich aber sofort nachdem das Script aufwacht 15 Leerzeichen und dann die Ziffern 1 bis 15 ausgegeben. Dann wartet der erste read Befehl wieder 5 Sekunden, schreibt den Buffer nach $trash und weiter geht der Irrsinn.
Andererseits kann ich während das Script beim ersten read-Befehl die 5 Sekunden wartet mit <Enter> $i hochzählen und auf dem Bildschirm ausgeben.
Wenn du weißt warum, dann laß mich nicht dumm sterben. Wenn jemand noch eine direkte Lösung ohne Workaround weiß, ebenso.
Ansonsten ist deine Lösung durchaus befriedigend und für die Benutzerausgabe in einem Bashscript allemal ausreichend.
Tausend Dank,
puntarenas