Das ist mir gelungen
echo -n "command" > /dev/tty1
Die Buchstaben erscheinen und der Cursor bewegt sich, aber es sind „Geister“ – wenn Sie Enter drücken , passiert nichts (sie sind nicht in stdin).
Bearbeiten:
In der Mitte des folgenden Screenshots sehen Sie, warum ich die Verwendung davon sehe. (Die Zeile mit einer roten Beschriftung, direkt unter der Zeile mit einer gelben Beschriftung.) So wie es jetzt ist, „bearbeiten“ Sie den Notiztext nicht wirklich; Sie werden nur aufgefordert, einen neuen Text zu schreiben, der den Text der Notiz ersetzt, die Sie (nicht wirklich) bearbeiten. Daher dachte ich, es könnte behoben werden, indem einfach der alte Text in das tty eingefügt wird:Wenn der Benutzer die Eingabetaste drückt, wird keine Änderung vorgenommen. (Dieses Programm ist in Perl/MySQL, aber ich dachte, es wäre interessanter, nach einer allgemeinen Lösung zu fragen als „wie mache ich das in Perl“.)
Bearbeiten 2:
Hier ist der Perl-Code, der den C-Code unten verwendet (funktioniert genau wie beabsichtigt), sowie ein neuer Screenshot – hoffentlich wird dies die Dinge zweifelsfrei klären 🙂 Schauen Sie noch einmal in die Mitte des Screenshots, wo die Bearbeitung vorgenommen wird der Notiztext – diesmal ist der alte Text vorhanden, wenn Sie beispielsweise nur einen Tippfehler korrigieren wollten, müssen Sie nicht den gesamten Notiztext neu eingeben.
my $edit_note_text = $edit_note_data[2];
print BOLD, RED, " new text: ", RESET;
system("writevt /dev/tty "$edit_note_text"");
my $new_text = <$in>;
$new_text = fix_input($new_text);
my $set_text = "UPDATE notes SET note = "$new_text" WHERE id = $edit_note_id";
$db->do($set_text);
Akzeptierte Antwort:
Ich habe gerade ein kleines C-Programm namens writevt
gefunden das macht den Trick. Holen Sie sich den Quellcode hier. Um es mit gcc
kompilieren zu lassen entfernen Sie einfach zuerst die folgenden Zeilen:
#include <lct/cline.h>
#include <lct/utils.h>
Aktualisieren . Der Befehl ist jetzt Teil von console-tools , daher in neueren Systemen verfügbar, es sei denn, Ihre Distribution verwendet kbd statt console-tools , in diesem Fall können Sie es aus dem Quellcode kompilieren (viel neuere Version, keine Änderung erforderlich).
Verwendung:
sudo writevt /dev/ttyN command
Beachten Sie, dass Sie aus irgendeinem Grund 'r'
verwenden müssen (oder 'x0D'
) anstelle von 'n'
(oder 'x0A'
), um eine Rücksendung zu senden.