Funktionstasten in ksh-Shell abfragen/abfangen

J

jürgen

Grünschnabel
Hallo,

ich habe ein korn shell Skript geschrieben, das eine einstellige Tastatureingabe ohne anschließende Betätigung der Return-Taste ermöglicht.

Die "normalen" darstellbaren Zeichen a-z, A-Z, 0-9 und diverse Sonderzeichen funktionieren damit zufriedenstellend.

Leider machen mir aber die Funktionstasten (z. B. F1 - F12, Entf, usw.) Probleme:
anstatt das erwartete eine Zeichen zu liefern, kommt die aus mehreren Zeichen bestehende Escape-Sequenz der gedrückten Funktionstaste und diese bekomme ich weder per stdout-Ausgabeumlenkung noch durch Zuweisung in eine Variable "in den Griff".


Hier das Skript
Code:
#!/bin/ksh

tastatureingabe()
{
   stty  raw -echo
   dd count=1 bs=1 2>/dev/null
   stty -raw  echo
} # ende der Funktion tastatureingabe()

# Tastatureingabe abfragen und auswerten
CHAR=x
while [[ $CHAR != Q ]]
do
   CHAR=`tastatureingabe | awk '{print toupper($1)}'`              # z.B. A
   typeset -i CHAR_DEZ
   CHAR_DEZ=`echo "$CHAR" | od -t dC | head -1 | awk '{print $2}'` # z.B. 65
   echo "Taste $CHAR (dezimal $CHAR_DEZ) gedrueckt"
done

, hier ein paar funktionierende Eingabebeispiele (Plattform Linux 2.4.21-278-smp), bei denen ich immer nur das hinter dem Wort "Taste " angezeigte Zeichen eingab
Code:
Taste A (dezimal 65) gedrueckt
Taste B (dezimal 66) gedrueckt
Taste Y (dezimal 89) gedrueckt
Taste Z (dezimal 90) gedrueckt
Taste 0 (dezimal 48) gedrueckt
Taste 1 (dezimal 49) gedrueckt
Taste 8 (dezimal 56) gedrueckt
Taste 9 (dezimal 57) gedrueckt
Taste ° (dezimal -80) gedrueckt
Taste ! (dezimal 33) gedrueckt
Taste " (dezimal 34) gedrueckt
Taste § (dezimal -89) gedrueckt
Taste $ (dezimal 36) gedrueckt
Taste % (dezimal 37) gedrueckt
Taste & (dezimal 38) gedrueckt
Taste / (dezimal 47) gedrueckt
Taste ( (dezimal 40) gedrueckt
Taste ) (dezimal 41) gedrueckt
Taste = (dezimal 61) gedrueckt
Taste ? (dezimal 63) gedrueckt
Taste ` (dezimal 96) gedrueckt
Taste ² (dezimal -78) gedrueckt
Taste ³ (dezimal -77) gedrueckt
Taste { (dezimal 123) gedrueckt
Taste [ (dezimal 91) gedrueckt
Taste ] (dezimal 93) gedrueckt
Taste } (dezimal 125) gedrueckt
Taste \ (dezimal 92) gedrueckt
Taste ß (dezimal -33) gedrueckt
Taste < (dezimal 60) gedrueckt
Taste > (dezimal 62) gedrueckt
Taste | (dezimal 124) gedrueckt
Taste , (dezimal 44) gedrueckt
Taste ; (dezimal 59) gedrueckt
Taste . (dezimal 46) gedrueckt
Taste : (dezimal 58) gedrueckt
Taste - (dezimal 45) gedrueckt
Taste _ (dezimal 95) gedrueckt
Taste # (dezimal 35) gedrueckt
Taste ' (dezimal 39) gedrueckt
Taste + (dezimal 43) gedrueckt
Taste * (dezimal 42) gedrueckt
Taste ~ (dezimal 126) gedrueckt
Taste Q (dezimal 81) gedrueckt

und hier mein Problem am Beispiel der einmalig gedrückten F5-Taste (und natürlich das anschließende Q zum Verlassen der while-Schleife)
Code:
Taste ezimal 27) gedrueckt
Taste [ (dezimal 91) gedrueckt
Taste 1 (dezimal 49) gedrueckt
Taste 5 (dezimal 53) gedrueckt
Taste ~ (dezimal 126) gedrueckt
Taste Q (dezimal 81) gedrueckt


Ich hoffe, dass ich mein Problem klar genug formuliert habe und dass jemand eine Idee/Lösung dafür hat.
Schon im Voraus danke für Eure Hilfe!
 

Ähnliche Themen

wpa_supplicant PEAP problem

K3b bricht Audio-CD-brennen immer ab

Onlineumfrage programmieren (mehrseitige HTML Formular an PHP übergeben)

Denial of Service vom Provider?

Vermute Hack-Attacke - Interpretation einer Fehlermeldung erwünscht!

Zurück
Oben