GNU/Linux >> Tutoriels Linux >  >> Linux

Construire une commande en mettant une chaîne dans un Tty ?

J'ai réussi à le faire

echo -n "command" > /dev/tty1

Les lettres apparaissent et le curseur se déplace, mais ce sont des "fantômes" - si vous appuyez sur Entrée , rien ne se passe (ils ne sont pas dans stdin).

Modifier :

Au milieu de la capture d'écran ci-dessous, vous voyez pourquoi je vois l'utilisation de cela. (La ligne avec une légende rouge, juste en dessous de la ligne avec une légende jaune.) Dans l'état actuel des choses, vous ne "modifiez" pas vraiment le texte de la note ; on vous demande simplement d'écrire un nouveau texte, qui remplacera le texte de la note que vous n'êtes (pas vraiment) en train d'éditer. Ainsi, j'ai pensé qu'il pourrait être remédié en collant simplement l'ancien texte dans le tty :si l'utilisateur appuie sur entrée, aucune modification n'est effectuée. (Ce programme est en Perl/MySQL, mais j'ai pensé qu'il serait plus intéressant de demander une solution générale que "comment puis-je faire cela en Perl".)

Éditer 2 :

Voici le code Perl, qui utilise le code C ci-dessous (fonctionne exactement comme prévu), ainsi qu'une nouvelle capture d'écran - espérons que cela clarifiera les choses sans aucun doute 🙂 Encore une fois, regardez au milieu de la capture d'écran, où la modification est apportée à le texte de la note - cette fois-ci, l'ancien texte est là, par exemple si vous vouliez juste corriger une faute de frappe, vous n'aurez pas à retaper tout le texte de la note.

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);

Réponse acceptée :

Je viens de trouver un petit programme C appelé writevt ça fait l'affaire. Prenez le code source ici. Pour le faire compiler avec gcc supprimez d'abord les lignes suivantes :

#include <lct/cline.h>
#include <lct/utils.h>

Mettre à jour . La commande fait maintenant partie de console-tools , donc disponible dans les systèmes plus récents, sauf si votre distribution utilise kbd au lieu de console-tools , auquel cas vous pouvez le compiler à partir des sources (version beaucoup plus récente, aucune modification nécessaire).

Utilisation :

sudo writevt /dev/ttyN command 

Notez que, pour une raison quelconque, vous devez utiliser 'r' (ou 'x0D' ) au lieu de 'n' (ou 'x0A' ) pour envoyer un retour.


Linux
  1. Manipulation de texte en ligne de commande avec sed

  2. 4 façons de créer un fichier texte dans un terminal Linux

  3. Supprimer les occurrences de chaîne dans le fichier texte

  4. Convertir une chaîne en hexadécimal sur la ligne de commande

  5. Comment éditer un fichier texte dans mon terminal

Patch dans The Matrix à la ligne de commande Linux

Commande Grep sous Linux (Rechercher du texte dans des fichiers)

Comment démarrer en ligne de commande Linux

Manipuler du texte en ligne de commande avec grep

Rechercher du texte sur la sortie du terminal ?

Comment rechercher et remplacer du texte dans Vim