GNU/Linux >> Linux Esercitazione >  >> Linux

Automatizza la risposta utilizzando Expect e Autoexpect in Linux

Quando un programma richiede l'input dell'utente, aspettati di inviare la risposta senza alcuna interazione dell'utente.

Installazione

Sistemi basati su Debian apt come Ubuntu

sudo apt update
sudo apt install -y expect

Sistemi basati su Red Hat come Centos

# Centos 7
sudo yum install -y expect

# Centos 8
sudo dnf install -y expect

Se ricevi errori sulla posizione del comando Expect, puoi ottenere la posizione utilizzando il comando which:

which expect
which autoexpect

Esempio

Salvalo in name.sh

#!/bin/bash

echo "What is your name?"
read name

echo "Your name is ${name}"

Rendi eseguibile lo script:

chmod +x name.sh

# Execute
./name.sh

Quando eseguo manualmente lo script, mi viene chiesto di inserire il nome con What is your name? quindi viene stampato dopo che sono entrato.

Possiamo usare expect per fornire una risposta automatica alla domanda. Ecco lo script:

Salvalo in auto.exp

#!/usr/bin/expect

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

Rendi leggibile ed eseguibile:

chmod +x auto.exp

Questo è l'output quando lo script viene eseguito con ./auto.exp :

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

Lavorare con le variabili

Puoi usare il comando set per definire le variabili negli script Expect come questo:

set user kip
set age 10

Per accedere alla variabile, precederla con $ come in bash (es. $user )

Per definire gli argomenti della riga di comando negli script Expect, utilizziamo la seguente sintassi:

set USER [lindex $argv 0]

Qui definiamo una variabile USER, che è uguale al primo argomento passato.

Puoi ottenere il primo e il secondo argomento e archiviarli in variabili come questa:

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

Esempio di script con variabili

Un altro modo per farlo senza creare uno script:
Esempio per cambiare la password sftp. Salvali in ./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"

Esegui lo script con

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

Aspettativa automatica

autoexpect command ti consente di fornire il tuo script come argomento, quindi creerà lo script per te.
Usi un comando come autoexpect ./installapp e creerà uno script Expect con le risposte che fornisci:

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

Il risultante script.exp il file includerà quindi una spiegazione che è stato creato con autoexpect e includerà le risposte che hai fornito.

Lo strumento autoexpect prepara lo script per l'esecuzione non interattiva di un'installazione. È quindi possibile eseguire installazioni senza dover fornire i dettagli o semplicemente programmarle per l'esecuzione autonoma.

Questo è il contenuto generato senza commenti

$ 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

Conclusione

Il expect Il comando è utile per eseguire script che richiedono una lunga serie di risposte e ti consente di eseguirli in modo non presidiato, mentre autoexpect semplifica la creazione di script attendibili senza stressare i dettagli sintattici.


Linux
  1. Come impostare l'indirizzo IP statico e configurare la rete in Linux

  2. Controlla lo spazio su disco in Linux usando df e du Commands

  3. Come impostare la priorità del processo Linux usando i comandi nice e renice

  4. Utilizzo di kbhit() e getch() su Linux

  5. Utilizzo di rz e sz sotto la shell Linux

Come impostare ed elencare le variabili di ambiente in Linux

Come installare e configurare Tor Browser su Linux

Come impostare ed elencare variabili ambientali in Linux

Suggerimenti e trucchi per l'utilizzo del comando wget Linux

Come impostare data e ora su Linux

Come impostare e annullare l'impostazione delle variabili di ambiente su Linux