从Expect脚本执行scp命令-使用eof

时间:2019-10-15 16:39:49

标签: expect scp

我正在尝试创建一个执行脚本并使用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子句之间有什么区别?我期待着同样的效果。

我是否需要在期望脚本的末尾调用“关闭”?

谢谢。

0 个答案:

没有答案