Соединение закрывается к тому времени, как вы дойдете до точки, где вы отправили свой пароль. Я подозреваю, что вам не нужно вводить пароль для этого сервера (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
}
Это теряет различие между тайм-аутом соединения и тайм-аутом передачи.