GNU/Linux >> Tutoriales Linux >  >> Linux

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

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

Linux
  1. Cómo usar una contraseña cifrada en Linux Bash Shell Script

  2. Cómo crear un script de un comando de Linux

  3. ¿Cómo ejecutar comandos bash de Linux en un script PERL?

  4. ¿Cómo acortar el indicador de Bash en Linux?

  5. ¿Se puede conectar un script Bash a un archivo?

Cómo personalizar Bash Prompt en Linux

Cómo ejecutar un script Bash

¿Cómo puedo ejecutar un script de Perl como un demonio del sistema en Linux?

¿Cómo verificar el acceso a Internet usando el script bash en Linux?

¿Cómo puedo probar mi script Bash en versiones anteriores de Bash?

¿Cómo puedo resolver un nombre de host en una dirección IP en un script Bash?