2011-09-14 19 views
11

Estoy escribiendo un script de shell de Linux para automatizar algunas cosas que estoy haciendo en Ubuntu 11.04.Manejo de confirmaciones de entrada en scripts de shell Linux

Básicamente, estoy escribiendo un script de shell para instalar NGINX, MySQL y PHP, y luego configuro todo. Sé cómo hacer todo a través de la línea de comandos.

Sin embargo, no sé cómo voy a manejar las partes donde el proceso solicita la entrada del usuario. Por ejemplo, ciertas cosas que instalo con apt-get le piden una confirmación, es decir, (Y) es o (N) o.

¿Cómo manejaría exactamente la confirmación automática en el script del shell, es decir, para confirmar automáticamente Sí o No cuando se me pida?

+0

¿Duplicado? http://stackoverflow.com/questions/226703/how-do-i-prompt-for-input-in-a-linux-shell-script (espero que ayude!) – heltonbiker

+0

@heltonbiker: no estoy tratando de obtener La entrada del usuario de la secuencia de comandos de shell, estoy tratando de forzar/hacer la entrada en cualquier lugar donde mi secuencia de comandos por lo general me hubiera obligado a proporcionar una respuesta de Sí o No. –

+0

Tienes razón, lo leí mal, lo siento. – heltonbiker

Respuesta

15

yes | ./script responderán y para todo.

De lo contrario, escribir un script que imprime las respuestas que desea, por ejemplo:

echo N 
echo Y 
echo Y 
+1

Gracias por esta opción. No estoy seguro de cómo estructuraría exactamente el guión para hacer esto, ¿tienes un ejemplo de código? –

+0

Si no quiere responder siempre 'sí', realmente no entiendo su pregunta, ya que depende completamente de cada caso. Si quiere responder "sí, sí, sí" a un script, simplemente: 'printf '' y \ ny \ nn \ n '' | ./your_script' o escriba un script simple con líneas separadas para imprimir cada respuesta, y luego: './answer_script | ./the_script' – wormsparty

+0

Muchas gracias. Supongo que tengo múltiples opciones ahora solo en caso de que quiera responder de manera diferente a diferentes mensajes. Esta parece ser la forma más elegante de hacer lo que quiero hacer, ya que solo necesito llamarlo una vez con el script. –

4

Por lo general, puede llamar a tales programas interactivos con la opción de responder automáticamente sí a todas las preguntas. Por ejemplo, puede llamar al apt-get con -y. Desde la página del manual:

-y, --yes, --assume-yes Sí a las solicitudes; suponga que "sí" como respuesta a todas las solicitudes y ejecute de forma no interactiva.

+0

Gracias. Esto era justo lo que estaba buscando. –

1

Trate Expect que podría ser lo que buscas.

+0

Muchas gracias por esto, se ve muy interesante. ¿Tendría que saber exactamente cuál será el mensaje, es decir, si el comando que ejecuto en mi script de shell va a hacer algo como "Ingrese su fecha de nacimiento", tendría que escribir Esperar "Ingrese su fecha de nacimiento : "exactamente como el mensaje va a pedirlo ?! –

+0

Por lo que yo sé - sí – LordDoskias

Cuestiones relacionadas