GNU/Linux >> Belajar Linux >  >> Linux

Otomatiskan Respons Menggunakan Harapkan dan Ekspektasi Otomatis di Linux

Saat sebuah program meminta input pengguna, harap kirimkan respons tanpa interaksi pengguna apa pun.

Pemasangan

Sistem berbasis Debian apt seperti Ubuntu

sudo apt update
sudo apt install -y expect

Sistem berbasis Red Hat seperti Centos

# Centos 7
sudo yum install -y expect

# Centos 8
sudo dnf install -y expect

Jika Anda mendapatkan kesalahan tentang lokasi dari perintah Harapkan, Anda bisa mendapatkan lokasi menggunakan perintah which:

which expect
which autoexpect

Contoh

Simpan ini di name.sh

#!/bin/bash

echo "What is your name?"
read name

echo "Your name is ${name}"

Jadikan skrip dapat dieksekusi:

chmod +x name.sh

# Execute
./name.sh

Ketika saya menjalankan skrip secara manual, saya diminta untuk memasukkan nama dengan What is your name? kemudian dicetak setelah saya masuk.

Kita bisa menggunakan expect untuk memberikan respons otomatis terhadap kueri. Berikut scriptnya:

Simpan ini ke auto.exp

#!/usr/bin/expect

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

Jadikan dapat dibaca dan dieksekusi:

chmod +x auto.exp

Ini adalah output ketika skrip dijalankan dengan ./auto.exp :

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

Bekerja dengan Variabel

Anda dapat menggunakan perintah set untuk mendefinisikan variabel dalam skrip ekspektasi seperti ini:

set user kip
set age 10

Untuk mengakses variabel, awali dengan $ seperti di bash (mis. $user )

Untuk mendefinisikan argumen baris perintah dalam skrip ekspektasi, kami menggunakan sintaks berikut:

set USER [lindex $argv 0]

Di sini kita mendefinisikan variabel USER, yang sama dengan argumen yang diteruskan pertama.

Anda bisa mendapatkan argumen pertama dan kedua dan menyimpannya dalam variabel seperti ini:

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

Contoh skrip dengan variabel

Cara lain untuk melakukannya tanpa membuat skrip:
Contoh untuk mengubah kata sandi sftp. Simpan ini ke ./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"

Jalankan skrip dengan

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

Harapan otomatis

autoexpect perintah memungkinkan Anda memberikan skrip Anda sebagai argumen kemudian itu akan membuat skrip untuk Anda.
Anda menggunakan perintah seperti autoexpect ./installapp dan itu akan membangun skrip ekspektasi dengan jawaban yang Anda berikan:

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

script.exp yang dihasilkan file kemudian akan menyertakan penjelasan bahwa itu dibuat dengan harapan otomatis dan akan menyertakan tanggapan yang Anda berikan.

Alat ekspektasi otomatis menyiapkan skrip untuk menjalankan penginstalan secara non-interaktif. Anda kemudian dapat melakukan penginstalan tanpa harus memberikan detailnya atau hanya menjadwalkannya untuk berjalan sendiri.

Ini adalah konten yang dihasilkan tanpa komentar

$ 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

Kesimpulan

expect command berguna untuk menjalankan skrip yang membutuhkan rangkaian jawaban yang panjang dan memungkinkan Anda untuk menjalankannya secara tidak berawak sementara autoexpect memudahkan untuk membuat skrip yang diharapkan tanpa menekankan detail sintaksis.


Linux
  1. Cara Mengatur Alamat IP Statis dan Konfigurasi Jaringan di Linux

  2. Bagaimana cara mengatur Tugas Otomatis pada VPS Linux Menggunakan Cron?

  3. Instal python-openstackclient di Linux dan Mac OS

  1. Periksa Ruang Disk di Linux Menggunakan Perintah df dan du

  2. Tetapkan tanggal dan waktu Sistem menggunakan C++ di Linux

  3. Menggunakan rz dan sz di bawah shell linux

  1. Menginstal dan Menggunakan Pengelola Paket Homebrew di Linux

  2. Cara Mengatur Prioritas Proses Linux Menggunakan Perintah Nice dan renice

  3. Menggunakan kbhit() dan getch() di Linux