GNU/Linux >> Tutoriels Linux >  >> Linux

Automatiser la réponse à l'aide de Expect et Autoexpect sous Linux

Lorsqu'un programme demande une entrée utilisateur, attendez-vous à envoyer la réponse sans aucune interaction de l'utilisateur.

Installation

Systèmes basés sur Debian apt comme Ubuntu

sudo apt update
sudo apt install -y expect

Systèmes basés sur Red Hat comme Centos

# Centos 7
sudo yum install -y expect

# Centos 8
sudo dnf install -y expect

Si vous obtenez des erreurs sur l'emplacement de la commande Expect, vous pouvez obtenir l'emplacement à l'aide de la commande which :

which expect
which autoexpect

Exemple

Enregistrez ceci dans name.sh

#!/bin/bash

echo "What is your name?"
read name

echo "Your name is ${name}"

Rendre le script exécutable :

chmod +x name.sh

# Execute
./name.sh

Lorsque j'exécute le script manuellement, il me demande d'entrer le nom avec What is your name? puis imprime après que j'entre.

Nous pouvons utiliser expect pour fournir une réponse automatisée à la requête. Voici le script :

Enregistrez-le dans auto.exp

#!/usr/bin/expect

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

Rendre lisible et exécutable :

chmod +x auto.exp

Ceci est la sortie lorsque le script est exécuté avec ./auto.exp :

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

Travailler avec des variables

Vous pouvez utiliser la commande set pour définir des variables dans des scripts attendus comme celui-ci :

set user kip
set age 10

Pour accéder à la variable, faites-la précéder de $ comme dans bash (par exemple $user )

Pour définir les arguments de ligne de commande dans les scripts attendus, nous utilisons la syntaxe suivante :

set USER [lindex $argv 0]

Ici, nous définissons une variable USER, qui est égale au premier argument passé.

Vous pouvez obtenir le premier et le second arguments et les stocker dans des variables comme ceci :

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

Exemple de script avec variables

Une autre façon de procéder sans créer de script :
Exemple pour changer le mot de passe sftp. Enregistrez-les dans ./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"

Exécutez le script avec

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

Attente automatique

autoexpect La commande vous permet de fournir votre script comme argument, puis elle créera le script pour vous.
Vous utilisez une commande comme autoexpect ./installapp et elle construira un script expect avec les réponses que vous fournissez :

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

Le résultat script.exp le fichier inclura alors une explication indiquant qu'il a été créé avec une attente automatique et inclura les réponses que vous avez fournies.

L'outil autoexpect prépare le script pour l'exécution non interactive d'une installation. Vous pouvez ensuite effectuer des installations sans avoir à fournir les détails ou simplement les planifier pour qu'elles s'exécutent d'elles-mêmes.

Ceci est le contenu généré sans commentaires

$ 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

Conclusion

Le expect La commande est pratique pour exécuter des scripts qui nécessitent une longue série de réponses et vous permet de les exécuter de manière autonome, tandis que l'attente automatique facilite la création de scripts attendus sans vous soucier des détails syntaxiques.


Linux
  1. Comment définir une adresse IP statique et configurer le réseau sous Linux

  2. Vérifier l'espace disque sous Linux à l'aide des commandes df et du

  3. Installation et utilisation du gestionnaire de packages Homebrew sous Linux

  4. Utiliser kbhit() et getch() sous Linux

  5. Utilisation de rz et sz sous linux shell

Comment définir et répertorier les variables d'environnement sous Linux

Comment installer et configurer le navigateur Tor sous Linux

Comment définir et répertorier les variables d'environnement sous Linux

Trucs et astuces pour utiliser la commande wget Linux

Comment définir la date et l'heure sous Linux

Comment définir et supprimer des variables d'environnement sous Linux