Forums Neueste Beiträge
 

Die sh und das read mit timeout

07/07/2010 - 17:14 von Thomas Jung | Report spam
Hallo,

ich wuerde gerne einige Eingaben mit einem timeout versehen
und komme nicht so recht weiter. Die Schell ist sh (nicht bash)

Ich finde zwar Beispiele mit "read -t x var" mit x Sekunden Wartezeit,
aber meine sh hier mag das Argument -t nicht kennen. Denke das
ist entweder was bash spezifisches oder gehoert auch zu zsh, ksh, etc.

Wie kann ich einen solchen timeout nach x Sekunden realisieren
und wie kann ich einen default Wert vorgeben, der anders ist,
wenn keine Eingabe erfolgt ist, aber der gewaehlt wird, wenn
einfach nur Return gedrueckt wird?

Beispiel:
Vorgabe (Eingabe Return) soll Yes sein, wenn aber nichts angegeben
wird soll nach einem timeout ein "No" angenommen werden. Problem
ist ja auch, dass bei keiner Eingabe das go ebenfalls leer ist, wie bei
Return, nicht?

echo "Moechten sie ein Eis installieren [Y/n]? \c"
read go
if [ "$go" = "" ] || [ "$go" = "y" ] || [ "$go" = "Y" ] || [ "$go" = "j" ]
|| [ "$go" = "J" ] ; then
exec `run to the italian coffee shop and buy some ice`
elif [ "$go" = "n" ] ; then
exec `move to Antarctica and swim with the penguins ;-)`
else
exec `open a Windows`
fi
unset go

btw: sollte man ein `unset go` benutzen, falls noch ein read mit go
danach kommt? Oder loescht ein darauffolgendes `read go` die
Variable $go selbst? Sieht nach meinen bisherigen Beobachtungen
zumindest danach aus.

btw2: wie kann ich in der sh und bei einem read abfragen ob ein
Return gedrueckt wurde? Ist das geschickt es mit einem leeren
String, hier also ein: if [ "$go" = "" ] zu machen?
Oder gibt es auch sowas in der (Pseudo) Art: if [ "$go" = char(13) ]

Letzte Woche hat mir noch jemand was von einer Kurzform erzaehlt,
etwa in der Art "if [ ! $go ]" aber so haut das hier wohl bestimmt nicht
hin.
Komme aber nicht mehr auf die genaue Syntax. Weiss das jemand
so aus der Lamaeng?

T.
 

Lesen sie die antworten

#1 Thomas Jung
18/07/2010 - 13:57 | Warnen spam
Hallo,

ich wuerde gerne einige Eingaben mit einem timeout versehen
und komme nicht so recht weiter. Die Schell ist sh (nicht bash)



Geht das denn gar nicht?
Ich komme hier einfach nicht weiter und mir fehlt
da einfach die Erfahrung und Routine mit Unix
Gibt es da nicht ein anders tool wie read, das sowas
auch in der sh shell ermoeglicht?

T.

Ähnliche fragen