我在不使用函数的情况下编写了我的第一个Expect脚本,它的任务是通过SSH连接到远程主机,然后从远程主机启动TFTP副本。
我想为用户提供复制另一个文件的选项,然后我想我需要从单个行序列中更改我的Expect代码并将其拆分为函数。
第一个功能是产生SSH:
proc Connect {sshOptions userName switchIP userPassword aclFile} {
spawn -noecho ssh "$sshOptions" $userName@$switchIP
log_user 0
expect {
timeout exit
-exact "Password:" { send -- "$userPassword\r" }
}
expect "*test#"
send_user "Connection established\n"
}
第二个功能是启动副本:
proc Copy_ACL {aclFile} {
send_user "Copying ACL file...\n"
send "***copy command here**"
expect "TFTP get operation was successful"
send_user "ACL File copied\n"
}
然后我按如下方式调用函数:
Connect $ssh_Options $user_Name $switch_IP $user_Password $acl_File
Copy_ACL $acl_File
目前,我面临的问题是,它似乎功能" Copy_ACL"对上一个函数Connect产生的SSH会话一无所知。复制命令被发送到stdout,尽管" log_user"已设为0。
我错过了什么?
此外,还有另一本关于Expect的书吗?" Exploring Expect"?
答案 0 :(得分:3)
我在修改现有代码方面取得了一些成功,以便在两个过程中使用相同的Expect会话。所有似乎都是必要的是使expect_out
和spawn_id
全局变量,以便它们可以在proc之间共享。当然,这意味着只能同时运行一个Expect会话,但这不是一个问题。