Este dilema se puede resolver de diferentes maneras, pero te dejamos la solución más completa para nosotros.
Solución:
Prueba esto:
echo -e "yesnyesnno" | /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 "%sn" 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.
Use 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 guión foo.shpuedes escribir foo.exp para automatizarlo.
Nota: También puede utilizar esperar automáticamente para crear un script aa partir de una sesión interactiva, que luego puede editar si es necesario. Recomiendo encarecidamente esto para las personas nuevas en Expect.
Guión Bash: foo.sh
Este es el script 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[@]"
Guión esperado: 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 ¡Muestre lo fácil que puede ser un script Expect mínimo!
#!/usr/bin/env expect
spawn -noecho /tmp/foo.sh
expect "Foo? " send -- "1r"
expect "Bar? " send -- "2r"
expect "Baz? " send -- "3r"
interact
Ejemplo de sesión interactiva
Así es como se verá su sesión interactiva cuando ejecute el script Expect. Generará su script Bash y responderá según las instrucciones a cada mensaje diferente.
$ /tmp/foo.exp
Foo? 1
Bar? 2
Baz? 3
1 2 3
Si para ti ha sido de utilidad este artículo, te agradeceríamos que lo compartas con el resto programadores así nos ayudas a extender esta información.