Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

read -t und read -n1 in POSIX

11 views
Skip to first unread message

Martin Vaeth

unread,
Feb 10, 2009, 3:31:18 AM2/10/09
to
Hallo,

bei der Konvertierung eines bash-Skripts in POSIX bin ich auf ein
Problem gestossen, fuer das ich keine Skript-Loesung finde:
Bashs read kennt -t (timeout) und -n1 (Ende nach 1 Zeichen),
POSIX aber nicht.
Gibt es in POSIX eine Moeglichkeit zu testen, ob ein Zeichen an stdin
anliegt und/oder dieses zu holen?
Die Alternative fuer -t waere wohl, read asyncron zu starten (um die
Prozess-ID zu bekommen), dann einen Prozess zu starten, der dieses
nach gewisser Zeit killt, und dann read wieder nach vorne zu holen.
Aber dabei ist mir erstens nicht klar, ob dabei garantiert ist, dass read
den urspruenglichen Input wiederbekommt (obwohl das bei dash zumindest so
zu sein scheint), und zweitens weiss ich nicht, wie ich wieder an den
stdout eines "nach vorne geholten" Prozesses komme: A=$(fg) geht nicht,
weil in der Subshell ja kein Prozess gestartet wurde.
Ausser Ausgabe in temporaere Files/FiFos, die fuer eine Tastaturabfrage
aber wirklich unangebracht sind und die ich aus anderen Gruenden ohnehin
vermeiden muss, faellt mir nichts ein.
Kann man in POSIX' Shell wirklich kein read -t emulieren?
Mit read -n1 sieht es wohl noch viel schlimmer aus...

Schoene Gruesse
Martin

Christian Weisgerber

unread,
Feb 10, 2009, 9:13:04 AM2/10/09
to
Martin Vaeth <va...@mathematik.uni-wuerzburg.de> wrote:

> Kann man in POSIX' Shell wirklich kein read -t emulieren?
> Mit read -n1 sieht es wohl noch viel schlimmer aus...

Letzteres macht man traditionell so:

STTY=`stty -g`
stty -icanon
INP=`dd count=1 bs=1 2>/dev/null`
stty $STTY

Mit "stty min 0 time <timeout>" kann man auch einen Timeout setzen.

--
Christian "naddy" Weisgerber na...@mips.inka.de

Martin Vaeth

unread,
Feb 12, 2009, 5:09:17 PM2/12/09
to
Martin Vaeth <va...@mathematik.uni-wuerzburg.de> schrieb:

> Kann man in POSIX' Shell wirklich kein read -t emulieren?
> Mit read -n1 sieht es wohl noch viel schlimmer aus...

Sorry, dass ich nicht auf Christian Weisgerbers Posting direkt antworten
kann, in dem meine Frage beantwortet wurde. Vielen Dank, das war genau
das, wonach ich gesucht hatte.

(Der Newsserver, den ich benutze, hatte anscheinend die letzten Tage
Probleme und Christians Posting niemals angezeigt, aber in google-groups
habe ich es gefunden).

0 new messages