为什么spawn scp无法正常工作?

时间:2015-07-01 06:08:25

标签: linux shell redhat scp

下面是我的包含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 脚本,它可以完全发送文件。

1 个答案:

答案 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命令的内部活动)。