2008-12-30 20 views
11

Tengo un script que llama a una aplicación que requiere la entrada del usuario, p. Ej. ejecutar la aplicación que requiere que el usuario escriba 'S' o 'N'.
¿Cómo puedo obtener que el script de shell no solicite al usuario la entrada, sino que use el valor de una variable predefinida en el script?Entrada desde el script de shell

En mi caso, habrá dos preguntas que requieren de entrada.

Respuesta

14

Puede canalizar cualquier texto que desee en stdin y será lo mismo que hacer que el usuario lo escriba. Por ejemplo, para la simulación de escribir "Y" sólo tiene que utilizar:

echo "Y" | myapp 

o el uso de una variable shell:

echo $ANSWER | myapp 

También hay un comando UNIX llamado "sí" que da salida a un flujo continuo de "y" para aplicaciones que hacen muchas preguntas que solo quieres responder afirmativamente.

+0

El eco es lo que necesito, pero con múltiples parámetros ... –

+3

En ese caso, intente utilizar el comando "printf" en lugar de eco, e incluir nuevas líneas en la cadena. Así que si desea responder a continuación, "N" utilización "Y": printf "Y \ NN \ n" | miaplicacion –

2

el comando esperar para situaciones más complicadas, su sistema debería tenerlo. No lo he usado mucho, pero sospecho que es lo que estás buscando.

$ man expect 

http://oreilly.com/catalog/expect/chapter/ch03.html

+0

aparentemente no has 'esperar' aquí - se ejecuta en hpux11 –

+0

instalarlo. esperar es una herramienta invaluable. – PEZ

2

Si la aplicación lee de la entrada estándar (en contraposición a partir de/dev/tty, como por ejemplo que hace el programa passwd), y luego de varias líneas de entrada es el candidato perfecto para un documento interno.

#!/bin/sh 

the_app [app options here] <<EOF 
Yes 
No 
Maybe 
Do it with $SHELL 
Quit 
EOF 

Como puede ver, aquí los documentos incluso permiten la sustitución de parámetros. Si no quiere esto, use <<'EOF'.

+1

Upvote para la solución de varias líneas – Pankrates

0

prefiero de esta manera: si quieres múltiples entradas ... se pone en múltiples declaraciones de eco como tan:

{ echo Y; Y; } | sh install.sh >> install.out 

En el ejemplo anterior ... me la alimentación de dos entradas en el install.sh guión. Entonces ... al final, estoy tubería de la salida de comandos en un archivo de registro que se va archivar y visualizar para más adelante.

Cuestiones relacionadas