GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Automatisierte Antwort mit Expect und Autoexpect in Linux

Wenn ein Programm nach einer Benutzereingabe fragt, senden Sie die Antwort ohne jegliche Benutzerinteraktion.

Installation

Debian apt-basierte Systeme wie Ubuntu

sudo apt update
sudo apt install -y expect

Red Hat-basierte Systeme wie Centos

# Centos 7
sudo yum install -y expect

# Centos 8
sudo dnf install -y expect

Wenn Sie Fehler bezüglich des Speicherorts des Expect-Befehls erhalten, können Sie den Speicherort mit dem which-Befehl abrufen:

which expect
which autoexpect

Beispiel

Speichern Sie dies in name.sh

#!/bin/bash

echo "What is your name?"
read name

echo "Your name is ${name}"

Machen Sie das Skript ausführbar:

chmod +x name.sh

# Execute
./name.sh

Wenn ich das Skript manuell ausführe, fordert es mich auf, den Namen mit What is your name? einzugeben wird dann ausgedruckt, nachdem ich eingetreten bin.

Wir können expect verwenden um eine automatisierte Antwort auf die Anfrage bereitzustellen. Hier ist das Skript:

Speichern Sie dies in auto.exp

#!/usr/bin/expect

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

Lesbar und ausführbar machen:

chmod +x auto.exp

Dies ist die Ausgabe, wenn das Skript mit ./auto.exp ausgeführt wird :

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

Mit Variablen arbeiten

Sie können den set-Befehl verwenden, um Variablen in Expect-Skripten wie folgt zu definieren:

set user kip
set age 10

Um auf die Variable zuzugreifen, stellen Sie ihr $ voran wie in bash (z.B. $user )

Um Befehlszeilenargumente in Expect-Skripten zu definieren, verwenden wir die folgende Syntax:

set USER [lindex $argv 0]

Hier definieren wir eine Variable USER, die dem ersten übergebenen Argument entspricht.

Sie können das erste und das zweite Argument erhalten und sie wie folgt in Variablen speichern:

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

Beispiel für ein Skript mit Variablen

Eine andere Möglichkeit, ohne ein Skript zu erstellen:
Beispiel zum Ändern des sftp-Passworts. Speichern Sie diese unter ./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"

Führen Sie das Skript mit

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

Automatisch erwarten

autoexpect Befehl können Sie Ihr Skript als Argument angeben, dann wird es das Skript für Sie erstellen.
Sie verwenden einen Befehl wie autoexpect ./installapp und es wird ein erwartetes Skript mit den von Ihnen bereitgestellten Antworten erstellen:

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

Die resultierende script.exp Die Datei enthält dann eine Erklärung, dass sie mit Autoexpect erstellt wurde, und enthält die von Ihnen bereitgestellten Antworten.

Das Autoexpect-Tool bereitet das Skript für die nicht interaktive Ausführung einer Installation vor. Sie können dann Installationen durchführen, ohne die Details angeben zu müssen, oder sie einfach so planen, dass sie eigenständig ausgeführt werden.

Dies ist der generierte Inhalt ohne Kommentare

$ 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

Schlussfolgerung

Der expect Der Befehl ist praktisch zum Ausführen von Skripten, die eine lange Reihe von Antworten erfordern, und ermöglicht es Ihnen, sie unbemannt auszuführen, während autoexpect es einfach macht, erwartete Skripte zu erstellen, ohne sich um die syntaktischen Details zu kümmern.


Linux
  1. Überprüfen Sie den Speicherplatz in Linux mit den Befehlen df und du

  2. So legen Sie die Linux-Prozesspriorität mit den Befehlen nice und renice fest

  3. Wie stelle ich automatische Aufgaben auf einem Linux-VPS mit Cron ein?

  4. Installieren Sie python-openstackclient unter Linux und Mac OS

  5. Stellen Sie Systemdatum und -zeit mit C++ unter Linux ein

So setzen und listen Sie Umgebungsvariablen in Linux auf

So installieren und konfigurieren Sie den Tor-Browser unter Linux

So setzen und listen Sie Umgebungsvariablen in Linux auf

Tipps und Tricks zur Verwendung des Linux-Befehls wget

So stellen Sie Datum und Uhrzeit unter Linux ein

So setzen und löschen Sie Umgebungsvariablen unter Linux