Thời gian chờ, trong kịch bản Bash


13

Làm cách nào để thêm thời gian chờ cho "mong đợi" trong tập lệnh sau? Tôi muốn đặt nó là 120 giây.

#!/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"

Câu trả lời:


13

Thời gian chờ mặc định expectlà 10 giây theo trang chủ của nó. Để thay đổi thành 120 giây, trước đó spawn ssh $USER@$HOST, thêm dòng

set timeout 120

để làm điều này

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

2

Theo trích xuất sau đây của trang người đàn ông mong đợi:

"Mong đợi [[-opts] pat1 body1] ... [-opts] patn [bodyn]

chờ cho đến khi một trong các mẫu khớp với đầu ra của một quá trình sinh ra, một khoảng thời gian xác định đã trôi qua hoặc một phần cuối của tệp được nhìn thấy. Nếu cơ thể cuối cùng trống rỗng, nó có thể được bỏ qua.

Các mẫu từ lệnh vọng_b Before gần đây nhất được sử dụng hoàn toàn trước bất kỳ mẫu nào khác. Các mẫu từ lệnh wish_after gần đây nhất được sử dụng hoàn toàn sau bất kỳ mẫu nào khác.

Nếu các đối số cho toàn bộ câu lệnh mong đợi yêu cầu nhiều hơn một dòng, tất cả các đối số có thể được "kết hợp" thành một để tránh kết thúc mỗi dòng bằng dấu gạch chéo ngược. Trong trường hợp này, sự thay thế Tcl thông thường sẽ xảy ra mặc dù có niềng răng.

Nếu một mẫu là từ khóa eof, phần thân tương ứng được thực thi khi kết thúc tệp. Nếu một mẫu là thời gian chờ từ khóa, phần thân tương ứng được thực thi khi hết thời gian. Nếu không có từ khóa hết thời gian nào được sử dụng, một hành động null ẩn được thực hiện khi hết thời gian. Thời gian chờ mặc định là 10 giây nhưng có thể được đặt, ví dụ là 30, bằng lệnh "đặt thời gian chờ 30". Thời gian chờ vô hạn có thể được chỉ định bởi giá trị -1. Nếu một mẫu là mặc định từ khóa, phần thân tương ứng được thực thi khi hết thời gian chờ hoặc cuối tập tin.

Nếu một mẫu phù hợp, thì cơ thể tương ứng được thực thi. mong đợi trả về kết quả của phần thân (hoặc chuỗi rỗng nếu không có mẫu nào khớp). Trong trường hợp nhiều mẫu khớp với nhau, mẫu xuất hiện đầu tiên được sử dụng để chọn một cơ thể. ... "


1

@DerfK đã trả lời câu hỏi của bạn. Tôi muốn cấu trúc lại tập lệnh của bạn để bảo trì mặc dù:

#!/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"
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.