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?

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.


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.


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

3
Un uso común aunque irónico es yes n, por ejemplo:yes n | mv -i * somewhere/
Sam Watkins
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.