«spawn id exp5 not open» Ошибка при scp'инге с ожидаемым скриптом - PullRequest
0 голосов
/ 27 августа 2018

У меня есть сценарий ожидаемого запуска, который запускается следующим образом:

#!/usr/bin/expect -f

set timeout 1200
set prompt {[#$] }

set server [lindex $argv 0]
set username [lindex $argv 1]
set password [lindex $argv 2]
set package [lindex $argv 3]

spawn scp -o StrictHostKeyChecking=no "$package" ${username}@${server}:~

expect {
    timeout { send_user "\nscp connect time out\n"; exit 1 }
    "*assword"
}

after 3000

send "$password\r"

# wait for upload complete

expect {
    timeout { send_user "\nscp timeout\n"; exit 1 }
    eof
    }

....
close

По истечении ~ 15 с он выдает следующее сообщение:

send: spawn id exp5 not open
        while executing
    "send "$password\r""

В чем может быть причиназа это?Что означает exp5?Я также пытался удалить оператор "после 3000", но я получаю ту же ошибку.

1 Ответ

0 голосов
/ 27 августа 2018

Соединение закрывается к тому времени, как вы дойдете до точки, где вы отправили свой пароль. Я подозреваю, что вам не нужно вводить пароль для этого сервера (ssh-ключи установлены?), И к тому времени, как истекут 3 секунды (after 3000), передача файла завершена.

Вы можете несколько сжать ваш сценарий:

#!/usr/bin/expect -f

set timeout 1200
set prompt {[#$] }

lassign $argv server username password package
# if your expect version does not have `lassign`, stick to below
#set server [lindex $argv 0]
#set username [lindex $argv 1]
#set password [lindex $argv 2]
#set package [lindex $argv 3]

spawn scp -o StrictHostKeyChecking=no "$package" ${username}@${server}:~

expect {
    timeout    {send_user "\nscp time out\n"; exit 1}
    "*assword" {send "$password\r"; exp_continue }
    eof
}

Это теряет различие между тайм-аутом соединения и тайм-аутом передачи.

...