Bash 继续处理在上一个进程上生成的SSH会话

Bash 继续处理在上一个进程上生成的SSH会话,bash,function,tcl,expect,Bash,Function,Tcl,Expect,我编写的第一个Expect脚本没有使用函数,它的任务是通过SSH连接到远程主机,然后从远程主机启动TFTP拷贝 我想为用户提供复制另一个文件的选项,然后我想我需要从一个行序列中更改Expect代码,并将其拆分为函数 第一个功能是生成SSH: proc Connect {sshOptions userName switchIP userPassword aclFile} { spawn -noecho ssh "$sshOptions" $userName@$switchIP l

我编写的第一个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\u out
spawn\u id
全局变量,以便在进程之间共享它们。当然,这意味着一次只能运行一个Expect会话,但这不太可能是个问题

我成功地修改了现有代码,以便在两个进程中使用相同的Expect会话。似乎所有必要的是使
expect\u out
spawn\u id
全局变量,以便在进程之间共享它们。当然,这意味着一次只能运行一个Expect会话,但这不太可能是个问题

我成功地修改了现有代码,以便在两个进程中使用相同的Expect会话。似乎所有必要的是使
expect\u out
spawn\u id
全局变量,以便在进程之间共享它们。当然,这意味着一次只能运行一个Expect会话,但这不太可能是个问题

我成功地修改了现有代码,以便在两个进程中使用相同的Expect会话。似乎所有必要的是使
expect\u out
spawn\u id
全局变量,以便在进程之间共享它们。当然,这意味着一次只能运行一个Expect会话,但这不太可能是个问题

你可以去找其他的导游。注意:显示古代例子的标记,并集中在该标记上方的内容。除了奥莱利那本书,我不知道还有其他什么书。你可以去找其他的导游。注意:显示古代例子的标记,并集中在该标记上方的内容。除了奥莱利那本书,我不知道还有其他什么书。你可以去找其他的导游。注意:显示古代例子的标记,并集中在该标记上方的内容。除了奥莱利那本书,我不知道还有其他什么书。你可以去找其他的导游。注意:显示古代例子的标记,并集中在该标记上方的内容。除了O'Reilly一书之外,我不知道还有其他什么书。在脚本开始时,我在函数中声明了一个变量(ssh_Id),在ssh被“触发”时保存spawn_Id的值。在我编写的函数“global ssh_id”中,似乎一切正常。这种方法正确吗?有没有更好的方法来解决这个问题?谢谢我正在修改公司代码库中的现有代码,因此无法直接共享。你所做的听起来像我所做的;对于我正在进行的重构,它是正确的,因此我不必再深入,也不需要有任何更深入的知识。祝你好运您始终可以通过
-i
参数将
spawn\u id
传递给expect函数。我建议您将
return$spawn\u id
添加到
Connect
proc中,并将从中获得的id传递到
Copy\u ACL
。在脚本开始时,我在函数中声明了一个变量(ssh\u id),在ssh被“触发”时保存spawn\u id的值。在我编写的函数“global ssh_id”中,似乎一切正常。这种方法正确吗?有没有更好的方法来解决这个问题?谢谢我正在修改公司代码库中的现有代码,因此无法直接共享。你所做的听起来像我所做的;对于我正在进行的重构,它是正确的,因此我不必再深入,也不需要有任何更深入的知识。祝你好运您始终可以通过
-i
参数将
spawn\u id
传递给expect函数。我建议您将
return$spawn\u id
添加到
Connect
proc中,并将从中获得的id传递到
Copy\u ACL
。在脚本开始时,我在函数中声明了一个变量(ssh\u id),在ssh被“触发”时保存spawn\u id的值。在我编写的函数“global ssh_id”中,似乎一切正常。这种方法正确吗?有没有更好的方法来解决这个问题?谢谢我正在修改公司代码库中的现有代码,因此无法直接共享。你所做的听起来像我所做的;对于我正在进行的重构,它是正确的,因此我不必再深入,也不需要有任何更深入的知识。祝你好运您始终可以通过
-i
参数将
spawn\u id
传递给expect函数。我建议您将
return$spawn\u id
添加到
Connect
proc中,并将从中获得的id传递到
Copy\u ACL
。在脚本开始时,我在函数中声明了一个变量(ssh\u id),在ssh被“触发”时保存spawn\u id的值。在我编写的函数“global ssh_id”中,似乎一切正常。这种方法正确吗?有没有更好的方法来解决这个问题?谢谢我正在修改公司代码库中的现有代码,因此无法直接共享。你所做的听起来像我所做的;对于我正在进行的重构,它工作正常,所以我不必再进一步了,真的