Archiv verlassen und diese Seite im Standarddesign anzeigen : In Shellscripten auf Tastendruck reagieren
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ä
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ä
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ä
Powered by vBulletin® Version 4.2.5 Copyright ©2024 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.