我正在尝试创建一个执行脚本并使用scp命令将给定文件复制到远程计算机。 如果我运行以下脚本,则scp命令将失败。
#!/usr/bin/expect -f
set ip_addr [lindex $argv 0]
set in_fname [lindex $argv 1]
set out_fname [lindex $argv 2]
set user [lindex $argv 3]
set password [lindex $argv 4]
set timeout 2
if {[llength $argv] != 5} {
send_user "Usage: ./scp_copy.sh <ip_address> <in_fname> <out_fname> <user> <password>\n"
exit 1
}
spawn scp $in_fname $user@$ip_addr:$out_fname
expect {
(yes/no) {send "yes\r"}
timeout
}
expect {
timeout
{
send_user "FAILED TO PERFORM SCP CMD.\n";
exit 1
}
password:
{
send "$password\r"
}
eof
}
...但是,如果我在第二个Expect子句的末尾删除了'eof',而是在末尾创建了一个新的Expect子句,则scp命令有效。
expect eof
请有人可以解释一下。我是完全不熟悉(和bash)脚本的人,很感谢能帮助我理解的简单解释。
“期望eof”到底有什么作用? eof是否表示产生的过程已完成?如果是这样,我是否应该引入另一个超时时间,例如
expect {
timeout { exit }
eof
}
第二个Expect子句中的eof与它自己的单独的Expect子句之间有什么区别?我期待着同样的效果。
我是否需要在期望脚本的末尾调用“关闭”?
谢谢。