GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Konstruieren Sie einen Befehl, indem Sie eine Zeichenfolge in ein Tty einfügen?

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.


Linux
  1. So schreiben Sie mit dem Linux-Befehl Text auf ein Bild

  2. Md5sum-Befehl Binär- und Textmodus?

  3. 4 Möglichkeiten zum Erstellen einer Textdatei im Linux-Terminal

  4. vim Tutorial mit Befehlsbeispielen

  5. Wandeln Sie eine Ausgabe in einen String um

Patchen Sie in The Matrix über die Linux-Befehlszeile

Grep-Befehl in Linux (Text in Dateien suchen)

So booten Sie in die Linux-Befehlszeile

Bearbeiten von Text in der Befehlszeile mit grep

Text auf der Terminalausgabe suchen?

So finden und ersetzen Sie Text in Vim