GNU/Linux >> Tutoriales Linux >  >> Linux

Automatice la respuesta usando Expect y Autoexpect en Linux

Cuando un programa solicita la entrada del usuario, espere enviar la respuesta sin ninguna interacción del usuario.

Instalación

Sistemas basados ​​en Debian apt como Ubuntu

sudo apt update
sudo apt install -y expect

Sistemas basados ​​en Red Hat como Centos

# Centos 7
sudo yum install -y expect

# Centos 8
sudo dnf install -y expect

Si obtiene errores sobre la ubicación del comando Expect, puede obtener la ubicación usando el comando which:

which expect
which autoexpect

Ejemplo

Guarda esto en name.sh

#!/bin/bash

echo "What is your name?"
read name

echo "Your name is ${name}"

Haga que el script sea ejecutable:

chmod +x name.sh

# Execute
./name.sh

Cuando ejecuto el script manualmente, me pide que ingrese el nombre con What is your name? luego se imprime después de ingresar.

Podemos usar expect para dar una respuesta automatizada a la consulta. Aquí está el guión:

Guarda esto en auto.exp

#!/usr/bin/expect

set timeout -1
spawn ./name.sh
expect "What is your name?\r"
send -- "John\r"
expect eof

Hacer legible y ejecutable:

chmod +x auto.exp

Este es el resultado cuando el script se ejecuta con ./auto.exp :

➜ ./auto.exp
spawn ./name.sh
What is your name?
John
Your name is John

Trabajar con variables

Puede usar el comando set para definir variables en secuencias de comandos esperadas como esta:

set user kip
set age 10

Para acceder a la variable, preceda con $ como en bash (por ejemplo, $user )

Para definir los argumentos de la línea de comandos en los scripts esperados, usamos la siguiente sintaxis:

set USER [lindex $argv 0]

Aquí definimos una variable USUARIO, que es igual al primer argumento pasado.

Puede obtener el primer y el segundo argumento y almacenarlos en variables como esta:

set USER [lindex $argv 0]
set PASSWORD [lindex $argv 1]

Ejemplo de script con variables

Otra forma de hacerlo sin crear un script:
Ejemplo para cambiar la contraseña de sftp. Guárdelos en ./sftp_password_change.exp .

#!/usr/bin/expect

set timeout 10
set curpass [lindex $argv 0];
set newpass [lindex $argv 1];
set user    [lindex $argv 2];
set server  [lindex $argv 3];

expect <<EOF
    spawn sftp -P 15422 [email protected]$server
    expect "Password:"
    send "$curpass\r"
    expect "Old Password:"
    send "$curpass\r"
    expect "New Password:"
    send "$newpass\r"
    expect "Reenter New Password:"
    send "$newpass\r"
    expect "sftp>"
    send "exit\n"

Ejecute el sctipt con

./sftp_password_change.exp $curpass $newpass $user $server

Espera automática

autoexpect El comando le permite proporcionar su secuencia de comandos como un argumento y luego creará la secuencia de comandos para usted.
Utiliza un comando como autoexpect ./installapp y creará una secuencia de comandos de expectativa con las respuestas que proporcione:

$ autoexpect ./name.sh
autoexpect started, file is script.exp
What is your name?
John
Your name is John
autoexpect done, file is script.exp

El script.exp resultante El archivo incluirá una explicación de que se creó con autoexpect e incluirá las respuestas que proporcionó.

La herramienta autoexpect prepara el script para ejecutar una instalación de forma no interactiva. Luego puede realizar instalaciones sin tener que proporcionar los detalles o simplemente programarlas para que se ejecuten solas.

Este es el contenido generado sin comentarios

$ cat script.exp
#!/usr/bin/expect -f
#
set force_conservative 0  ;# set to 1 to force conservative mode even if
              ;# script wasn't run conservatively originally
if {$force_conservative} {
    set send_slow {1 .1}
    proc send {ignore arg} {
        sleep .1
        exp_send -s -- $arg
    }
}

set timeout -1
spawn ./name.sh
match_max 100000
expect -exact "What is your name?\r
"
send -- "John\r"
expect eof

Conclusión

El expect El comando es útil para ejecutar secuencias de comandos que requieren una larga serie de respuestas y le permite ejecutarlas sin supervisión, mientras que autoesperar facilita la creación de secuencias de comandos esperadas sin preocuparse por los detalles sintácticos.


Linux
  1. Instalación y uso de Homebrew Package Manager en Linux

  2. Cómo establecer la prioridad del proceso de Linux usando los comandos nice y renice

  3. ¿Cómo configurar Automatizar tareas en un VPS de Linux usando Cron?

  4. Instale python-openstackclient en Linux y Mac OS

  5. Usando kbhit() y getch() en Linux

Cómo establecer y enumerar variables de entorno en Linux

Cómo instalar y configurar el navegador Tor en Linux

Cómo establecer y enumerar variables ambientales en Linux

Consejos y trucos para usar el comando wget Linux

Cómo configurar la fecha y la hora en Linux

Cómo configurar y desactivar variables de entorno en Linux