bash-Programmierung, Abfrage welche Taste gedrückt wurde

Fragenbash-Programmierung, Abfrage welche Taste gedrückt wurde
ulf schreglmann - Samstag, 22. Januar 2011 10:05 Uhr

Hallo Community,
nachdem mir erst so gut geholfen wurde, eine neue Frage:

Wie kann in einem bash-Script abgefragt werden, ob und ggf. welche Taste gedrückt wurde?
Im Kofler kann ich dazu leider nichts finden.
Danke im voraus,
Ulf

2 Antworten
Lutz Golke - Samstag, 22. Januar 2011 10:25 Uhr

Moin,
meinst du sowas?


#!/bin/bash
echo "press any key + return"
read KEY
echo $KEY

Weitere info gibt’s u.a. hier:

http://tldp.org/LDP/Bash-Beginners-Guide/html/Bash-Beginners-Guide.html
http://tldp.org/LDP/abs/html/

hth,
Lutz

ulf schreglmann - Samstag, 22. Januar 2011 19:32 Uhr

Hallo Lutz,
danke. hab meine Frage schlecht gestellt. Lies bitte Antwort an René.
Ulf

René Franke - Samstag, 22. Januar 2011 17:41 Uhr

Gude!
Ich denke, Du willst auf einen beliebigen Tastendruck (also nicht zwingend RETURN) warten und diesen auswerten.
Die Bash kennt zwar keine PAUSE-Funktion. Du kannst sie aber nachbauen und damit eine Art Ereigniswarteschleife starten:

> read -s -n 1 -p „Eine Taste drücken…“ KEY
> Eine Taste drücken… [Benutzer drückt ]
> echo $KEY
> k

René

ulf schreglmann - Samstag, 22. Januar 2011 19:39 Uhr

Hallo René,
danke für Deine Antwort. Ich merke, dass ich meine Frage nicht gut genug gestellt habe.
Besser gefragt:
In einer Endlosschleife (aus dem Kofler),

while true
do
…..
done

soll abgefragt werden, ob eine Taste (z.B. + oder -) gedrückt wurde. Solange nicht, weiter! Wenn + soll z.B. ein Zaehler erhöht, wenn – soll er vermindert werden.
Und der Kernpunkt: Ist das mit bash-Script möglich? Mit read schaffe ich es bisher nicht.
Danke, Ulf

Rico Rommel - Samstag, 22. Januar 2011 22:45 Uhr

Für read gibts es einen Timeout.

read -t 1 wartet eine Sekunde und bricht dann ab bzw . setzt das Programm auch ohne Interaktion fort.

ulf schreglmann - Sonntag, 23. Januar 2011 07:16 Uhr

Hallo Rico,
prima! Das habe ich bis jetzt nicht mal unter „man read“ gefunden. Werde gleich weiter testen.
danke, Ulf

ulf schreglmann - Sonntag, 23. Januar 2011 08:54 Uhr

Hallo Alle,
nun komme ich endlich zum Testen und bedauere, denn die zeile von René

read -s -n 1 -p „Eine Taste drücken…“ KEY

führt bei -s und -n 1 zum Fehler „Illegal option“. Nur -p klappt.
Ich arbeite mit Kubuntu 10-4, das kanns aber nicht sein.
Welche version von read habt ihr?
Ulf

Rico Rommel - Sonntag, 23. Januar 2011 12:16 Uhr

Wenn ich mich nicht irre, ist der Befehl read in die shell eingebaut.

Möglicherweise verwendest du in deinen Script nicht bash als shell.

ulf schreglmann - Sonntag, 23. Januar 2011 17:56 Uhr

Hallo Rico,
danke, Du hast richtig vermutet. Ich Penner habe nach update auf Kubuntu 10-4 vergessen den link /bin/sh auf /bin/bash umzustellen. War auf dash.eingestellt.
Danke schoen, weil es jetzt klappt.
gl, Ulf

René Franke - Montag, 24. Januar 2011 23:34 Uhr

>> Ich Penner habe nach update auf Kubuntu 10-4 vergessen den link /bin/sh auf /bin/bash umzustellen.

Geh nicht zu hart mit Dir ins Gericht. Das ist mir auch schon passiert: Ne halbe Stunde im eigenen Code rumgefummelt um festzustellen, dass der SheBang in der ersten Zeile falsch gesetzt ist.

Und damit wieder ernsthaft: Den Link /bin/sh -> dash solltest Du tunlichst nicht umbiegen, da die Dash mit voller Absicht die Systemshell ist. Besser explizit #!/bin/bash an den Skriptanfang.

René

René Franke - Montag, 24. Januar 2011 23:36 Uhr

> Das habe ich bis jetzt nicht mal unter „man read“ gefunden.

Aber vielleicht unter „help read“? 😉

René

Deine Antwort