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.