Cómo enviar entrada estándar a través de una tubería

Cómo enviar entrada estándar a través de una tubería

Necesito enviar una entrada estándar o un código clave inmediatamente después de que se inicie el programa.

Por ejemplo

$ program | F3

Respuesta1

Necesitarías definirempiezaallá.

Puede insertar las secuencias de caracteres enviadas por su terminal cuando presiona F3en el búfer de entrada del dispositivo terminalantesejecutando su programa con TIOCSTI ioctl() en algunos sistemas como Linux:

{
   perl -le 'require "sys/ioctl.ph";
   ioctl(STDIN, &TIOCSTI, $_) for split "","@ARGV"' "$(tput kf3)"
   program
}

O puede usar algo como expectejecutar su programa en una capa de terminal falsa, esperar a que genere algún mensaje (o cualquier indicación de que escomenzóhasta el punto esperado), y envíe esa salida luego:

expect -c 'spawn -noecho program; expect {>} {send [exec tput kf3]}; interact'

(aquí esperando un >mensaje, reemplácelo por alguna cadena que programse genere cuando esté listo para leer la entrada).

También puede reemplazar su entrada estándar con una tubería, pero si esa aplicación espera cosas como F3presionar teclas, lo más probable es que sea una aplicación interactiva, por lo que probablemente no le gustará que su entrada estándar no sea una terminal. Siempre puedes intentarlo de todos modos:

tput kf3 | program

Sin embargo, después de programleer el resultado de tput, verá el final del archivo (no hay nada más que leer), lo que puede provocar que se cierre. Con:

{ tput kf3; cat; } | program

Enviamos la salida de kf3y luego usamos catpara reenviar todo lo que escribe en el terminal a program. Por otra parte, es poco probable que funcione, ya que lo más probable programes que ponga el terminal en un modo en el que la entrada se envíe tan pronto como escriba y deshabilite lo echocual ya no puede hacer porque su entrada no es el terminal.

Podrías hacer la misma configuración tú mismo:

saved_settings=$(stty -g)
stty -icanon -echo min 1 time 0
{ tput kf3; cat; } | program
stty "$saved_settings"

información relacionada