PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : In Shellscripten auf Tastendruck reagieren



pagex
08-09-2004, 08:28
Hi.
...gleich noch eine Frage zu Shellscripten
wie kann auf einen bestimmten Tastendruck (z.B. Taste "A") ohne anschließendes RETURN reagieren?
thx, cya

ContainerDriver
08-09-2004, 23:40
Hi,


[...]
-n nchars
read returns after reading nchars characters
rather than waiting for a complete line of
input.
[...]


meinst du das?



#!/bin/sh

read -n 1 buff;
echo -en "\n========>$buff\n";


Gruß, Florian

peschmae
09-09-2004, 08:52
Super, wusste gar nicht dass das geht. Danke :)

MfG Peschmä

pagex
09-09-2004, 09:27
Danke, genau das was ich meinte. Jetzt stehe ich vor dem nächsten Problem...
Wie erkenne ich, ob es sich bei dem eingegebenen Zeichen um ein Leerzeichen handelt?
thx, cya

ContainerDriver
09-09-2004, 10:42
Meinst du mit Leerzeichen ein " "? Dann halt ganz normal mit []/test überprüfen:


#!/bin/sh

read -n 1 buff

if [ $buff = " " ];
then
echo "Hallo";
fi;
.

peschmae
09-09-2004, 15:47
Zumindest bei mir geht das so nicht. Bei Eingabe von Enter/Space oder so ist die Variable leer:

peschmae@thinkpad:~$ echo a${buff}a
aa

So sieht der Output aus wenn ich Enter oder Space eingebe.

Respektive wenn ich das obige Test-Konstrukt verwende steht da:
bash: [: =: unary operator expected
Was gleichbedeutend ist mit "die variable ist leer" oder "da steht gar nix"

MfG Peschmä

ContainerDriver
09-09-2004, 16:45
Oha! Manchmal vertseh ich das nicht, wie die Shell das interpretiert... So gehts


#!/bin/sh

read -n 1 buff

if [ ! $buff = " " ];
then
echo -en "\n========>$buff\n";
#else dann für " "
fi;
oder so


#!/bin/sh

read -n 1 buff

if [ -z $buff ];
then
echo -en "\n========>$buff\n";
fi;
.
Vlt. sollte ich mich doch irgendwann mal ein Shellporgrammierungsbuch besorgen.

peschmae
09-09-2004, 17:31
Aber damit kannst du nicht zwischen " " und "
" unterscheiden. Naja, ist mir eigentlich auch egal ;)



Vlt. sollte ich mich doch irgendwann mal ein Shellporgrammierungsbuch besorgen.

*lol*
Hab ich mir auch schon ein paarmal gedacht. Geht aber irgendwie ganz gut einfach so und mit dem ABS-Guide.

MfG Peschmä

ContainerDriver
09-09-2004, 20:06
*lol*
Hab ich mir auch schon ein paarmal gedacht. Geht aber irgendwie ganz gut einfach so und mit dem ABS-Guide.

MfG Peschmä
ABS-Guide ist ja interessant, kannt ich nämlich bis gerade eben nicht.

Hans-Georg Normann
09-09-2004, 20:54
Der Erste Lösungsansatz von Florian war garnicht so schlecht.
#!/bin/sh

read -n 1 buff

if [ $buff = " " ];
then
echo "Hallo";
fi; Fehlen nur die Qutationmarks (zu deutsch: Gänsefüsschen ;) ) um das $buff
#!/bin/sh

read -n 1 buff

if [ "$buff" = " " ]; then
echo "Hallo"
fi

peschmae
09-09-2004, 21:47
Wie schon gesagt - ich habs zwar nicht explizit erwähnt aber die Quotes um das $buf habe ich schon gemacht - das ganze will nicht mit einem Leerschlag. d.h. $buf ist leer wenn ich einen Space eintippe - ganz leer.

MfG Peschmä

Hans-Georg Normann
09-09-2004, 21:56
Die Leutz die ein Script lesen können sind im Vorteil, die die auch noch die Ausgabe entziffern können, haben fast schon gewonnen.

Ich glaub, ich gehe morgen zum Augenarzt......... :eek:

Hast recht, es geht nicht!

Hans

ContainerDriver
09-09-2004, 21:57
Also bei mir gehts mit dem "$buff", egal ob " ", "\n" oder irgendetwas anderes.

Ist ja jetzt aber auch egal, nicht dass das noch in einen Streit ausartet.

Gruß, Florian

EDIT: Verdammt, in der Datei war noch eine andere Versionals die zuletzt gepostete, also es gehr wirklich _nicht_!

peschmae
09-09-2004, 22:15
*lol*

Dann sind wir uns ja einig. :)
Das Leerzeichen/Enter kommt gar nicht nach $buf - das sieht man wenn man die Sache mitten in nem Text ausgibt so à la a${buf}a wie ich oben geschrieben habe.

Woran das allerdings liegt kann ich mir irgendwie nicht vorstellen.

MfG Peschmä

pagex
10-09-2004, 08:07
interessante Diskussion... :D
nur was ist jetzt das Ergebenis? es geht nicht?

ContainerDriver
10-09-2004, 10:05
Also, nochmal ich.
So kann man " " & "\n" (also Enter) abfragen (aber man weiß nicht, obs " " oder "\n" war):


#!/bin/sh

read -n 1 buff


if [ -z $buff ]; then
echo "Hallo"
fi



Gruß, FLorian

peschmae
10-09-2004, 11:17
Genau. Weil bei Enter und Space jeweils die Variable leer ist und es deshalb genau so gut Space hätte sein können.

MfG Peschmä