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
, 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
und hier mein Problem am Beispiel der einmalig gedrückten F5-Taste (und natürlich das anschließende Q zum Verlassen der while-Schleife)
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!
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!