Prueba esto:
echo -e "yes\nyes\nno" | /path/to/your/script
Desde help echo
:
-e
:habilitar la interpretación de los siguientes escapes de barra invertida
Tubería a entrada estándar
Algunas secuencias de comandos pueden recibir respuestas de la entrada estándar. Una de las muchas maneras de hacer esto sería:
$ printf "%s\n" yes yes no | ./foo.sh
yes yes no
Esto es simple y fácil de leer, pero depende de cómo las partes internas de su secuencia de comandos manejen la entrada estándar, y si no puede editar la secuencia de comandos de destino, a veces puede ser un problema.
Utilice Expect para avisos interactivos
Si bien a veces puede salirse con la suya usando la entrada estándar, las indicaciones interactivas generalmente se manejan mejor con herramientas como Expect. Por ejemplo, dado un script foo.sh , puedes escribir foo.exp para automatizarlo.
Nota:también puede usar autoesperar para crear un script a partir de una sesión interactiva, que luego puede editar si es necesario. Recomiendo encarecidamente esto a las personas nuevas en Expect.
Guión Bash:foo.sh
Esta es la secuencia de comandos que quizás desee automatizar.
#!/usr/bin/env bash
for question in Foo Bar Baz; do
read -p "${question}? "
replies=("${replies[@]}" "$REPLY")
done
echo "${replies[@]}"
Esperar guión:foo.exp
Aquí hay una secuencia de comandos Expect simplista para automatizar la secuencia de comandos Bash anterior. Esperar bucles, bifurcaciones y expresiones regulares puede proporcionar mucha más flexibilidad que la que muestra este ejemplo simplificado, pero lo hace ¡muestra lo fácil que puede ser un script Expect mínimo!
#!/usr/bin/env expect
spawn -noecho /tmp/foo.sh
expect "Foo? " { send -- "1\r" }
expect "Bar? " { send -- "2\r" }
expect "Baz? " { send -- "3\r" }
interact
Sesión interactiva de muestra
Así es como se verá su sesión interactiva cuando ejecute el script Expect. Generará su secuencia de comandos Bash y responderá según las instrucciones a cada mensaje diferente.
$ /tmp/foo.exp
Foo? 1
Bar? 2
Baz? 3
1 2 3