Sono riuscito a farlo
echo -n "command" > /dev/tty1
Vengono visualizzate le lettere e il cursore si sposta, ma sono "fantasmi" - se premi Invio , non succede nulla (non sono in stdin).
Modifica:
Nel mezzo dello screenshot qui sotto, vedi perché vedo l'uso di questo. (La riga con una didascalia rossa, proprio sotto la linea con una didascalia gialla.) Come è ora, non stai realmente "modificando" il testo della nota; ti viene solo chiesto di scrivere un nuovo testo, che sostituirà il testo della nota che stai (non proprio) modificando. Quindi, ho pensato che si potesse rimediare semplicemente incollando il vecchio testo nella tty:se l'utente preme invio, non viene apportata alcuna modifica. (Questo programma è in Perl/MySQL, ma ho pensato che sarebbe stato più interessante chiedere una soluzione generale piuttosto che "come posso farlo in Perl".)
Modifica 2:
Ecco il codice Perl, che usa il codice C qui sotto (funziona esattamente come previsto), oltre a un nuovo screenshot – si spera che questo chiarisca le cose senza dubbio 🙂 Ancora una volta, guarda al centro dello screenshot, dove viene effettuata la modifica il testo della nota:questa volta, il vecchio testo è lì, ad esempio se vuoi solo correggere un errore di battitura, non dovrai ridigitare l'intero testo della nota.
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);
Risposta accettata:
Ho appena trovato un piccolo programma C chiamato writevt
questo fa il trucco. Prendi il codice sorgente qui. Per farlo compilare con gcc
rimuovi prima le seguenti righe:
#include <lct/cline.h>
#include <lct/utils.h>
Aggiorna . Il comando ora fa parte di console-tools , quindi disponibile nei sistemi più recenti, a meno che la tua distribuzione non utilizzi kbd invece di strumenti di console , nel qual caso puoi compilarlo dal sorgente (versione molto più recente, nessuna modifica necessaria).
Utilizzo:
sudo writevt /dev/ttyN command
Nota che, per qualche motivo, devi usare 'r'
(o 'x0D'
) invece di 'n'
(o 'x0A'
) per inviare un reso.