[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: Skriptfrage: Benutzereingabe mit Timeout



Hallo Andre!

* Andre Tann schrieb am 27.11.2013 um 23:22 (+0100):

> ich möcht gerne eine Benutzereingabe realisieren mit einem
> Timeout. Macht der Nutzer keine Eingabe, so soll nach Ablauf
> der Zeitspanne ein Defaultwert gelten. Soweit mit read
> -t... kein Problem.

Vorsicht Bashismus! Die Option -t gibt es nur bei read in der
bash.  Falls /bin/sh -> dash muss die shebang-Zeile #!/bin/bash
lauten.  Wenn du das Skript portabel halten willst, gibt es
andernfalls nur die Alternative auf den Countdown ganz zu
verzichten.  Da read ein internes Kommando ist, kann man es auch
nicht mit timelimit beenden.  Aber wahrscheinlich weißt du das
sowieso.

> Nun würde ich gerne auch die Sekunden sehen, die rückwärts bis
> auf 0 zählen. Gibts dafür ne einfache Lösung, die ich übersehen
> habe, oder muß ich mir dafür was konstruieren, was a) zählen
> kann, und b) währenddessen auch direkt auf eine Eingabe
> reagiert?

Eine einfache Lösung sehe ich nicht.  Sollte das Skript im
Sekundentakt zählen und der Benutzer seine Eingabe nicht
innerhalb einer Sekunde komplett eingegeben haben, müsste das
Skript wegen b) auch noch mit Teileingaben umgehen können
(vgl. read -e der bash).  Je mehr ich über die Details einer
bloßen Shell-Lösung nachdenke, desto größer wird der Albtraum.

Möglicherweise lässt sich mit dialog etwas basteln, was deinen
Anforderungen näher kommt, wobei auch hier die parallele
Ausführung und v. a. die Darstellung das Problem sein wird:

    dialog --gauge ...
    dialog --timeout 10 --inputbox ...

Ob der ganze Aufwand sich in irgendeiner Form lohnt, musst du
selbst beantworten.  Ist die bloße Erwähnung des Timeouts in
einer Erklärung vor der Eingabe wirklich nicht ausreichend?

Grüße
Mathias


Reply to: