Очікуйте тайм-аут у сценаріїх Bash


13

Як додати тайм-аут для "очікувати" у наступному сценарії? Я хочу встановити це як 120 секунд.

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

Відповіді:


13

За замовчуванням час очікування expectстановить 10 секунд відповідно до його сторінки. Щоб змінити його на 120 секунд, до цього spawn ssh $USER@$HOSTдодайте рядок

set timeout 120

зробити це

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

Відповідно до наступного витягу з чоловічої сторінки на очікування:

"очікувати [[-opts] pat1 body1] ... [-opts] patn [bodyn]

чекає, поки одна з шаблонів збігається з результатом спареного процесу, пройшов визначений часовий проміжок або не відображається кінець файлу. Якщо кінцевий корпус порожній, його можна опустити.

Шаблони з останньої команди команда очікують раніше неявно використовуються перед будь-якими іншими шаблонами. Шаблони з останньої команди команда очікують непрямо використовуються після будь-яких інших шаблонів.

Якщо аргументи для всього оператора очікування вимагають більше одного рядка, всі аргументи можуть бути "скоплені" в один, щоб уникнути завершення кожного рядка з косою рисою. У цьому випадку звичайні заміни Tcl відбудуться, незважаючи на дужки.

Якщо шаблон є ключовим словом eof, відповідне тіло виконується в кінці файлу. Якщо шаблон є тайм-аутом ключового слова, відповідне тіло виконується під час таймауту. Якщо ключове слово тайм-аута не використовується, під час очікування виконується неявна нульова дія. Інтервал очікування за замовчуванням становить 10 секунд, але може бути встановлений, наприклад, 30 командою "встановити тайм-аут 30". Нескінченний час очікування може бути позначений значенням -1. Якщо шаблон є ключовим словом за замовчуванням, відповідне тіло виконується або під час очікування, або в кінці файлу.

Якщо шаблон відповідає, то виконується відповідний орган. очікує, що повертає результат тіла (або порожній рядок, якщо жоден шаблон не збігається). У випадку, якщо кілька шаблонів збігаються, для вибору тіла використовується той, що з’являється першим. ... "


1

@DerfK відповів на ваше запитання. Я хотів би відновити ваш сценарій для технічного обслуговування:

#!/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"
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.