Harapkan batas waktu, dalam skrip Bash

13

Bagaimana cara menambahkan batas waktu untuk "berharap" dalam skrip berikut? Saya ingin mengaturnya sebagai 120 detik.

#!/bin/bash
HOST="localhost"
USER="myuname"
PASS="mypassword"

VAR=$(expect -c "
spawn ssh $USER@$HOST
expect \"password:\"
send \"$PASS\r\"
expect \"\\\\$\"
send \"ls\r\"
expect -re \"$USER.*\"
send \"logout\"
")

echo "==============="
echo "$VAR"
Bijo
sumber

Jawaban:

13

Batas waktu default untuk expectadalah 10 detik sesuai dengan halaman manualnya. Untuk mengubahnya menjadi 120 detik, sebelumnya spawn ssh $USER@$HOST, tambahkan baris

set timeout 120

untuk membuat ini

VAR=$(expect -c "
set timeout 120
spawn ssh $USER@$HOST
expect \"password:\"
send \"$PASS\r\"
expect \"\\\\$\"
send \"ls\r\"
expect -re \"$USER.*\"
send \"logout\"
")
DerfK
sumber
2

Menurut ekstrak halaman manual berikut untuk mengharapkan:

"harapkan [[-opts] pat1 body1] ... [-opts] patn [bodyn]

menunggu hingga salah satu pola cocok dengan output dari proses spawned, periode waktu tertentu telah berlalu, atau akhir file terlihat. Jika badan terakhir kosong, mungkin dihilangkan.

Pola dari perintah expect_before terbaru secara implisit digunakan sebelum pola lain. Pola dari perintah expect_after terbaru secara implisit digunakan setelah pola lain.

Jika argumen untuk seluruh pernyataan harapan membutuhkan lebih dari satu baris, semua argumen dapat "dikuatkan" menjadi satu untuk menghindari terminasi setiap baris dengan garis miring terbalik. Dalam satu kasus ini, substitusi Tcl biasa akan terjadi meskipun ada kawat gigi.

Jika suatu pola adalah kata kunci bukti, badan yang sesuai dieksekusi pada akhir file. Jika suatu pola adalah batas waktu kata kunci, tubuh yang sesuai dieksekusi setelah batas waktu. Jika tidak ada kata kunci batas waktu yang digunakan, tindakan nol tersirat dilaksanakan pada batas waktu. Periode batas waktu default adalah 10 detik tetapi dapat diatur, misalnya menjadi 30, dengan perintah "set timeout 30". Batas waktu tak terbatas dapat ditentukan oleh nilai -1. Jika suatu pola adalah kata kunci default, tubuh yang sesuai dieksekusi pada batas waktu atau akhir file.

Jika suatu pola cocok, maka tubuh yang sesuai dieksekusi. harapkan mengembalikan hasil tubuh (atau string kosong jika tidak ada pola yang cocok). Jika beberapa pola cocok, yang muncul pertama digunakan untuk memilih tubuh. ... "

mdpc
sumber
1

@ DerfK telah menjawab pertanyaan Anda. Saya akan memperbaiki naskah Anda untuk pemeliharaan:

#!/bin/bash
export HOST="localhost"
export USER="myuname"
export PASS="mypassword"

script=<<'END_OF_SCRIPT'
    set timeout 120
    spawn ssh $env(USER)@$env(HOST)
    expect "password:"
    send "$env(PASS)\r"
    expect "\$"
    send "ls\r"
    expect -re "$env(USER).*"
    send "logout"
    expect eof
END_OF_SCRIPT

VAR=$(expect -c "$script")

echo "==============="
echo "$VAR"
glenn jackman
sumber