Saltar al contenido

¿Cómo puedo responder automáticamente a las indicaciones en un script Bash de Linux?

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.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *