M
manfred
Jungspund
Hallo Leute,
erst mal ein Lob. Auf meiner Lösungssuche bin ich hier über euer Forum gestolpert, was Ihr hier für Tipps gebt, ist ja richtig Profihaft, - dickes Lob an euch -
Als "Rübergucker" aus der Windowswelt versuche ich nun, "Xubuntu feisty fawn" ein paar spezielle Funktionen beizubringen, ohne Xubuntu durch zusätzliche Pakete aufblähen zu müssen = mit der Shell, genauer Xterm
Und für diese Helferleins versuche ich grad, eine Eingaberoutine zu erstellen.
Eigentlich komm ich gut voran (kann Sondertasten abfangen und auswerten, Sonderzeichen umsetzen) aber bei einem Problem fehlen mir Ideen bzw. Hintergrundwissen.
Der "read"-Befehl der Shell unterschlägt mir die Leertasten.
Mit folgendem (aufs wesentliche gekürtzten) Script läßt sich das demonstrieren:
kurz beschreibend:
das Unterprogramm "FragEinfachTasteAb" holt mittels read immer ein Byte von der Tastatur und gibt dieses über die variable $ruckgabe an das Hauptprogramm zurück.
Das Hauptprogramm hängt dieses Byte an eine Variable dran ($eingabe) und läßt sich von "FragEinfachTasteAb" die nächsten Bytes geben, bis die Escape-Taste gedrückt wurde.
das Problem:
read gibt beim Drücken der Spacetaste den chr$(32) nicht in die Variable $Zeichen, sondern läßt diese Variable einfach leer (mit Länge null).
Würde ich jetzt "read" nicht mit Parameter -n1 dazu überreden, nur ein Zeichen (kein Return nötig) einzulesen, dann wären die gedrückten spaces mit in der Variable drin, aber bei EinCharEingaben unterdrückt read diese.
Kennt jemand einen Trick, wie man doch an diese Spaces rankommt?
Besten Dank für euer grübeln im voraus
Manfred
erst mal ein Lob. Auf meiner Lösungssuche bin ich hier über euer Forum gestolpert, was Ihr hier für Tipps gebt, ist ja richtig Profihaft, - dickes Lob an euch -
Als "Rübergucker" aus der Windowswelt versuche ich nun, "Xubuntu feisty fawn" ein paar spezielle Funktionen beizubringen, ohne Xubuntu durch zusätzliche Pakete aufblähen zu müssen = mit der Shell, genauer Xterm
Und für diese Helferleins versuche ich grad, eine Eingaberoutine zu erstellen.
Eigentlich komm ich gut voran (kann Sondertasten abfangen und auswerten, Sonderzeichen umsetzen) aber bei einem Problem fehlen mir Ideen bzw. Hintergrundwissen.
Der "read"-Befehl der Shell unterschlägt mir die Leertasten.
Mit folgendem (aufs wesentliche gekürtzten) Script läßt sich das demonstrieren:
Code:
echo ===============================================================================
echo mk_abfrage.script Eastler 27.Aug.2007/27.Aug.2007
echo -------------------------------------------------------------------------------
# --------------------------------------------------------------------------------------------------------------------------------------------------
FragEinfachTasteAb () {
ruckgabe="keine" # dummystartparameter in $ruckgabe, daß die whileschleife erst mal läuft
unset zeichen # da diese Routine mehrfach aufgerufen wird, für den Start $zeichen leeren
while [ "$ruckgabe" = "keine" ]; do
# zeichen=""
read -n1 -t1 -s zeichen # lese eine Sekunde lang (-t1) genau 1 Zeichen (-n1) von der Tastatur ohne Anzeige (-s)
zeitflag="$?" # Rückgabefehlerwert von read in Var speichern (0=es war eine Eingabe, 1=Zeit abgelaufen)
case "$zeichen" in
" ") ruckgabe="_" ;; # fehlschlagender Versuch die Eingabe der Leertaste abzufragen
$'\x20') zeichen="_" ;; # ebenfalls fehlschlagender Versuch die Eingabe der Leertaste abzufragen
$'\x1b') zeichen="st:" ; echo -n "|" ; ruckgabe="Sondertaste" ;; # byte war chr$(27)
*) ruckgabe=$zeichen ;; # bei allen anderen Tasten 1:1 die Eingabe per $ruckgabe zurückgeben
esac
# echo "Länge der Eingabe: ${#zeichen}" # damit getestet, wie land $zeichen ist, wenn fuer read ein Space gedrückt wird. IMMER NULL :-(
done
return #$ruckgabe
}
#===============================================================================
# Hauptroutine
#===============================================================================
while [ "$ruckgabe" != "Sondertaste" ]; do
FragEinfachTasteAb
echo -n $ruckgabe
eingabe=$eingabe$ruckgabe
done
echo
echo -------------------------------------------------------------------------------
echo "Ihre Eingaben waren: $eingabe"
echo ===============================================================================
das Unterprogramm "FragEinfachTasteAb" holt mittels read immer ein Byte von der Tastatur und gibt dieses über die variable $ruckgabe an das Hauptprogramm zurück.
Das Hauptprogramm hängt dieses Byte an eine Variable dran ($eingabe) und läßt sich von "FragEinfachTasteAb" die nächsten Bytes geben, bis die Escape-Taste gedrückt wurde.
das Problem:
read gibt beim Drücken der Spacetaste den chr$(32) nicht in die Variable $Zeichen, sondern läßt diese Variable einfach leer (mit Länge null).
Würde ich jetzt "read" nicht mit Parameter -n1 dazu überreden, nur ein Zeichen (kein Return nötig) einzulesen, dann wären die gedrückten spaces mit in der Variable drin, aber bei EinCharEingaben unterdrückt read diese.
Kennt jemand einen Trick, wie man doch an diese Spaces rankommt?
Besten Dank für euer grübeln im voraus
Manfred