Preparar respuestas para preguntas de un comando

14

Digamos que quiero escribir un script de shell que ejecute solo un comando. Pero este comando está mal diseñado. No ofrece ninguna opción de línea de comando; en su lugar, hace algunas preguntas y espera la entrada del usuario.

¿Hay alguna forma de preparar esta entrada en el script, de modo que las preguntas se respondan automáticamente?

tmuecksch
fuente

Respuestas:

16

Si el comando no es muy exigente, debería funcionar con algo como esto:

command > /dev/null << EOF
<answer 1>
<answer 2>
<answer 3>
EOF

Esto requiere que sepa las respuestas exactas de antemano.

Bjorn Munch
fuente
Puede usar la respuesta anterior para diseñar un script de ajuste. El nuevo script debe escuchar los parámetros y llamar al comando anterior con el método anterior.
Walter A
También conocido como documento AQUÍ, para obtener más información, puede probar Wikipedia aquí definición del documento
OldTimer
15

Esperar puede hacer eso. Desde el sitio web de Expect :

Expect es una herramienta para automatizar aplicaciones interactivas como telnet, ftp, passwd, fsck, rlogin, tip, etc. Expect hace que todo esto sea trivial. Expect también es útil para probar estas mismas aplicaciones [...] "

Viene con mucha ayuda, como autoexpect .

De nuevo desde el sitio web de Expect,

autoexpect te observa interactuando con otro programa y crea un script de Expect que reproduce tus interacciones. Para los guiones en línea recta, la autoexpección ahorra un tiempo considerable al escribir guiones a mano.

Christopher
fuente
Gracias por su respuesta. Como mis necesidades son muy bajas, esperar es excesivo en mi caso. La respuesta de Bjorns se adapta perfectamente a mis necesidades. Pero le sugiero que mantenga su respuesta para otros que necesitan una solución más compleja.
tmuecksch
+1 porque no sabía que existía la autoexpectación y pensé que la curva de aprendizaje esperada era demasiado empinada para molestarme. Echaré otro vistazo.
Joe
7

Si su script espera que se responda un mensaje, o varios mensajes en los que puede dar la misma respuesta, hay yes:

NAME
       yes - output a string repeatedly until killed

SYNOPSIS
       yes [STRING]...
       yes OPTION

DESCRIPTION
       Repeatedly output a line with all specified STRING(s), or `y'.

Úselo así:

yes Me | give_a_hug.sh
unperson325680
fuente
3
Un uso común aunque irónico es yes n, por ejemplo:yes n | mv -i * somewhere/
Sam Watkins