预期脚本:有没有办法默认返回到以前的 spawn_id?

预期脚本:有没有办法默认返回到以前的 spawn_id?

在我使用 spawn scp 文件后,spawn_id exp8 关闭。获取 eof。因此,在此之后我运行的任何其他命令都会收到此消息:未找到名为“exp8”的通道。因此,我假设一旦发生 spawn,脚本就会默认为最新的 spawn,无论它是否仍然存在。

有没有办法将默认设置恢复为 exp7?或者我必须指出在每个发送和期望命令上使用 exp7 吗?

我之所以问这个问题,是因为我似乎无法使用 send 命令让 scp 工作。似乎只有 scp 的 spawn 命令似乎有效。它的 send 版本似乎只是挂在那里,并没有真正发送命令。我使用 send 向其他服务器发出 ssh 命令没有问题,但它对 scp 不起作用。所以我必须使用 spawn。但我在尝试推进程序时遇到了这个问题。该程序的目的是登录服务器,将文件从原始服务器复制到登录服务器,然后从登录服务器登录到只能通过此“访问服务器”访问的其他远程服务器并发出安装命令。

我在 Linux Questions 上问过这个问题,但我得到的回答只是我需要更详细。所以这让我觉得那里没有人知道答案,但他们很快就挑出帖子的毛病。我没有要求任何人审查任何代码,而且我无法发布它,因为它在另一个隔离的网络上。但如果有人知道这个问题的答案,那就太好了。

答案1

有没有办法默认恢复为 exp7?

正如spawn期望(1)手册页说:

当进程启动时spawn,变量spawn_id被设置为引用该进程的描述符。 描述的进程spawn_id被视为当前进程。 spawn_id可以读作或书面形式,实际上提供工作控制。

所以:

spawn ssh ...
# Save $spawn_id for later use
set ssh_spawn_id $spawn_id

spawn scp ...
# If a password is expected...
#expect assword:
#send "$pass\r"
# Either way, wait for SCP to finish
expect eof

# Now switch back to SSH
set spawn_id $ssh_spawn_id
...

相关内容