TCL Expect SCP进度脚本
TCL Expect SCP progress script
我正在编写脚本以将 TCL 文件从服务器传输到远程系统。每个文件可能需要大约 2 个小时才能传输。我使用 -re .
的原因是在进行过程中它将匹配任何内容并更新超时。所以在 10 秒内,如果没有变化,那么它将结束脚本。到目前为止我有这个脚本:
set timeout 10
expect {
-re ".*assword*." {
send "${password}\r\r"
exp_continue
} "lost connection" {
set success2 0
set success1 0
} "100%" {
puts "File Transfer successful\n"
set success1 0.5
exp_continue
} -re . {
exp_continue
} timeout {
set success2 0
set success1 0
} -re ".*closed by remote host" {
set success2 0.5
}
}
# IF success1 + success2 = 1, then the transfer was successful.
问题是这只是有时有效。文件传输 100% 后,我必须等待消息 Connection close by remote host
才能继续执行脚本。我相信 -re .
匹配在此之前的内容并结束脚本。显示此消息所需的时间各不相同。因此我收到消息找不到变量 success2
使用 expect -re .
,即使将此模式放在 -re .
之前,您也可能无法匹配 -re ".*closed by remote host"
。你能 expect
NN%
字符串吗?例如:
set timeout 60 ;# more timeout since you're scp'ing big files
expect {
-re ".*assword*." {
send "${password}\r" ;# why do you use ``\r\r''?
exp_continue
} "lost connection" {
set success2 0
set success1 0
} "100%" {
puts "File Transfer successful\n"
set success1 0.5
exp_continue
} -re {[0-9]{1,2}%} {
exp_continue
} timeout {
set success2 0
set success1 0
} -re ".*closed by remote host" {
set success2 0.5
} eof {
set success2 0.5
}
}
我不确定你 spawn
scp
怎么样。我的 scp
没有输出 closed by remote host
消息。也许 -re ".*closed by remote host"
部分不是必需的,所以您可以保留 eof
部分。
我正在编写脚本以将 TCL 文件从服务器传输到远程系统。每个文件可能需要大约 2 个小时才能传输。我使用 -re .
的原因是在进行过程中它将匹配任何内容并更新超时。所以在 10 秒内,如果没有变化,那么它将结束脚本。到目前为止我有这个脚本:
set timeout 10
expect {
-re ".*assword*." {
send "${password}\r\r"
exp_continue
} "lost connection" {
set success2 0
set success1 0
} "100%" {
puts "File Transfer successful\n"
set success1 0.5
exp_continue
} -re . {
exp_continue
} timeout {
set success2 0
set success1 0
} -re ".*closed by remote host" {
set success2 0.5
}
}
# IF success1 + success2 = 1, then the transfer was successful.
问题是这只是有时有效。文件传输 100% 后,我必须等待消息 Connection close by remote host
才能继续执行脚本。我相信 -re .
匹配在此之前的内容并结束脚本。显示此消息所需的时间各不相同。因此我收到消息找不到变量 success2
使用 expect -re .
,即使将此模式放在 -re .
之前,您也可能无法匹配 -re ".*closed by remote host"
。你能 expect
NN%
字符串吗?例如:
set timeout 60 ;# more timeout since you're scp'ing big files
expect {
-re ".*assword*." {
send "${password}\r" ;# why do you use ``\r\r''?
exp_continue
} "lost connection" {
set success2 0
set success1 0
} "100%" {
puts "File Transfer successful\n"
set success1 0.5
exp_continue
} -re {[0-9]{1,2}%} {
exp_continue
} timeout {
set success2 0
set success1 0
} -re ".*closed by remote host" {
set success2 0.5
} eof {
set success2 0.5
}
}
我不确定你 spawn
scp
怎么样。我的 scp
没有输出 closed by remote host
消息。也许 -re ".*closed by remote host"
部分不是必需的,所以您可以保留 eof
部分。