GNU/Linux >> Tutoriales Linux >  >> Linux

¿Construir un comando poniendo una cadena en un Tty?

Me las arreglé para hacer esto

echo -n "command" > /dev/tty1

Aparecen las letras y el cursor se mueve, pero son "fantasmas", si presiona Enter , no pasa nada (no están en stdin).

Editar:

En el medio de la siguiente captura de pantalla, verá por qué veo el uso de esto. (La línea con un título rojo, justo debajo de la línea con un título amarillo). Tal como está ahora, en realidad no está "editando" el texto de la nota; solo se le pide que escriba un nuevo texto, que reemplazará el texto de la nota que (no realmente) está editando. Por lo tanto, pensé que podría remediarse simplemente pegando el texto anterior en el tty:si el usuario presiona enter, no se realiza ninguna modificación. (Este programa está en Perl/MySQL, pero pensé que sería más interesante pedir una solución general que "¿cómo hago esto en Perl?").

Edición 2:

Aquí está el código Perl, que usa el código C a continuación (funciona exactamente como se esperaba), así como una nueva captura de pantalla; con suerte, esto aclarará las cosas más allá de toda duda. el texto de la nota:esta vez, el texto anterior está ahí, por ejemplo, si solo desea corregir un error tipográfico, no tendrá que volver a escribir todo el texto de la 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);

Respuesta aceptada:

Acabo de encontrar un pequeño programa en C llamado writevt eso hace el truco. Coge el código fuente aquí. Para hacerlo compilar con gcc simplemente elimine las siguientes líneas primero:

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

Actualizar . El comando ahora es parte de console-tools , por lo tanto disponible en sistemas más recientes, a menos que su distribución use kbd en lugar de herramientas de consola , en cuyo caso puede compilarlo desde la fuente (versión mucho más reciente, no se necesita modificación).

Uso:

sudo writevt /dev/ttyN command 

Tenga en cuenta que, por alguna razón, debe usar 'r' (o 'x0D' ) en lugar de 'n' (o 'x0A' ) para enviar una devolución.


Linux
  1. Comando Md5sum ¿Modo binario y de texto?

  2. 4 formas de crear un archivo de texto en la terminal de Linux

  3. Eliminar ocurrencias de cadena en archivo de texto

  4. Convertir cadena a hexadecimal en la línea de comando

  5. Cómo editar un archivo de texto en mi terminal

Parche en The Matrix en la línea de comando de Linux

Comando Grep en Linux (Buscar texto en archivos)

Cómo iniciar en la línea de comandos de Linux

Manipulación de texto en la línea de comando con grep

¿Buscar texto en la salida del terminal?

Cómo encontrar y reemplazar texto en Vim