GNU/Linux >> Linux Esercitazione >  >> Linux

Costruire un comando inserendo una stringa in un Tty?

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.


Linux
  1. Rimuovi le occorrenze della stringa nel file di testo

  2. Converti stringa in esadecimale sulla riga di comando

  3. Converti un output in una stringa

  4. Converti una stringa di testo in bash in array

  5. Come modificare un file di testo nel mio terminale

Patch in The Matrix dalla riga di comando di Linux

Grep Command in Linux (Trova testo nei file)

Come avviare la riga di comando di Linux

Manipolazione del testo dalla riga di comando con grep

Cerca testo sull'output del terminale?

Come trovare e sostituire il testo in Vim