Tengo un programa que requiere que ingrese datos a medida que se ejecuta el programa. Imagínese algo así:
$ ./program
Hi there. What's your name? Zambezi
What is your quest? To make a program which runs nicely
What is your favourite color? Red
...
Ahora, tengo varias entradas de prueba para ejecutar mi programa. Todos contienen algo como:
Arthur, King of the Britons
To seek the Holy Grail
...
Sin embargo, algunos de mis scripts de prueba fallan, y desafortunadamente es muy difícil para mí descifrar exactamente dónde fallaron, ya que mi terminal se ve así:
$ ./program < arthur.txt
Hi there. What's your name?What is your quest?What is your favourite color?...
¿Hay alguna manera de que todavía pueda dar entrada a stdin
través de un archivo, pero aún así el terminal aparece como si lo hubiera escrito todo?
Linux Mint 16 es mi sistema operativo si eso importa.
Respuestas:
En lugar de utilizar la redirección de entrada (./program <arthur.txt), que es solo almacenar la entrada en su programa, debe usar herramientas como "esperar" para esperar la pregunta y enviar las respuestas una por una.
Mejores ejemplos: http://www.pantz.org/software/expect/expect_examples_and_tips.html
fuente
expect
script que sepa qué provoca los problemas de su programa y sabe alimentar su programa con la tercera línea de entrada en respuesta al "¿Cuál es su color favorito?" pregunta - y luego haga que elexpect
script lea elarthur.txt
archivo (o cualquier otro archivo especificado, adecuadamente estructurado) para obtener esas entradas, en lugar de tenerlas codificadas en el script.Esto es exactamente para lo que
tee
se usa.Por ejemplo:
Lo que sucede aquí es que tee toma stdin y lo copia en stdout y lo canaliza nuevamente. Al igual que en la junta para tuberías.
Consulte la camiseta de la página de manual (1) para obtener más detalles.
fuente
program.exe
yarthur.txt
.cat arthur.txt | tee >( program.exe )