继续处理先前proc上生成的SSH会话

时间:2015-08-31 22:41:30

标签: bash function tcl expect

我在不使用函数的情况下编写了我的第一个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"?

1 个答案:

答案 0 :(得分:3)

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