继续处理在上一个过程中产生的 SSH 会话

Continue working on SSH session spawned on a previous proc

我写了我的第一个 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 会话一无所知。尽管 "log_user" 已设置为 0,但复制命令已发送到标准输出。

我错过了什么?

另外,除了"Exploring Expect",还有没有关于Expect的书?

我在修改现有代码以在两个过程中使用相同的 Expect 会话方面取得了一些成功。似乎所有必要的就是制作 expect_outspawn_id 全局变量,以便它们可以在 proc 之间共享。当然,这意味着一次只能有一个 Expect 会话 运行,但这不太可能成为问题。