PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : get keypress bash



stormbind
10-02-2002, 13:41
hallöchen,

ich möchte in mein shellscript eine art history der eingegeben befehle einbauen. das heißt, wenn ich wie normal die pfeiltaste nach oben drücke, soll er nicht ^[[A ausgeben, sondern auf die History der eingegeben begriffe zugreifen und ausgeben. aber ich weiß nicht wie ich die tastatur abfrage ohne die eingabe zu bestätigen. hart irgendjemand eine idee?

Marc

deac
10-02-2002, 14:15
Das ist unter Linux nicht ganz einfach. Es gibt in dieser Hinsicht ein paar Sachen. Ich kenne 3:
1) Andere Shell nehmen. ZSH kann ohne Probleme ein Zeichen einlesen, mit read. Das Manual gibt darüber auskunft. ZSH ist in gewissem Grad BASH-kompatibel. ZSH bietet eben nur sehr viel mehr.
2) Ein Programm selbst schreiben mit C++ (kann ich hochladen, ich hab mal eins in einem Buch zu dem Thema gefunden.
3) dd bs=1c count=1
Die Ausgabe von dd wird dein Zeichen sein. Du must trotzdem Enter drücken. Aber du kannst mit stty in dem raw-Modus gehen, um nicht das Enter abwarten zu müssen:
stty raw
dd bs=1c count=1
stty -raw
Diese 3 Zeilen lesen genau ein Zeichen ein und geben sie an die stout ab.

Das Buch heißt Shell-Programmierung und ist von MUT. Ist was für Anfänger, wie ich es mal war. Es ist aber immernoch ein Nachschlagewerk für bestimmte Sachen.

stormbind
10-02-2002, 14:22
das ganze script ist halt in bash.. ich weiß nicht ob ich des einfach so "portieren" kann. zu idee 2:
es wär schon klasse wenn du das hochladen könntest
mailto:stormbind@stormbind.de

zu 3: dieser weg führt zu unendlich buchstabensuppe auf meim monitor, so will des bei mir nicht funktionieren, also wär ich stark für lösung 2, wenn du das programm schon hast;-)

thnx, Marc

deac
10-02-2002, 14:29
Das Gleichheitszeichen war falsch. Probier es noch mal.
Nimm copy&past, damit die Zeichen eins zu eins genommen werden. Das ist etwas bescheuert, da die 1 schon aussieht, als wäre eine Leerzeichen davor. Der Befehl funktioniert 100%ig.

Das Programm hab ich nicht. Ich benutze immer Lösung 1/3. Ich muss es erst abtippen. Oder ich schau mal, ob es keine URL dazu gibt.

stormbind
10-02-2002, 14:38
habs hinbekommen, jetzt muss ich des nur noch einbauen... thnx schon mal!!

Marc

stormbind
11-02-2002, 14:08
ahem, ich glaub ich bin einfach zu unfähig das zu implementieren...
ich switche in den raw modus, gebe dd bs=1c count=1, er wartet brav auf ne abfrage, genau so wie es wollte reagiert des ding dann auch auf den nächsten tastendruck. jetzt muss ich aber überprüfen, ob überhaupt die taste nach oben gedrückt wurde, also brauch ich den wert der eingabe...
alle meine ansätze sind gescheitert...

Marc

deac
12-02-2002, 11:41
Speicher doch einfach den Wert in einer Variable.;)
variablenname=`dd count=1 bs=1c`
Dann kannst du die Variable einfach abfragen.