下面是我的包含spawn scp相关脚本的脚本。
spawn scp -r /usr/local/clo/Jenkins.zip root@xu.domain.com:/usr/local/clo
expect "password:"
send "111111\r"
expect "*\r"
expect "\r"
但是当我执行它时,它输出以下日志,它无法正确传输文件。 **
spawn scp -r /usr/local/clo/Jenkins.zip root@xu.domain.com:/usr/local/clo
root@xu.domain.com's password:
Jenkins.zip 0% 0 0.0KB/s --:-- ETA
**
我想知道'0%'是如何发生的?如果我从控制台手动执行 scp 脚本,它可以完全发送文件。
答案 0 :(得分:1)
我怀疑发生这种情况是因为生成进程的输出在显示进度表时包含\ r(回车)字符,请尝试在Expect脚本末尾添加expect eof
。
但是为了解决超时问题,最好检测进度表,在显示进度表的同时使用exp_continue
继续执行:
spawn scp -r /usr/local/clo/Jenkins.zip root@xu.domain.com:/usr/local/clo
expect "password:"
send "111111\r"
expect {
"ETA" {exp_continue}
"100%" {}
}
expect eof
您还可以在脚本开头添加exp_internal 1
(它报告expect命令的内部活动)。