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
> 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
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).