有一个名为sshuttle的程序可以连接到服务器并创建一个隧道。
我希望创建一个bash函数,其顺序如下:
sshuttle -r myhost 0/0),kill -s TERM <pidOfTheAboveTunnel>.一个基本的想法(可以工作,但5秒的延迟是一个问题)是类似于sshuttle -r myhost 0/0 & ; sleep 5 ; mycommand ; kill -s TERM $(pgrep sshuttle)
是否可以使用expect来期望字符串"c :连接到服务器“。是从这里收到的吗?作为一名新手,我的尝试除了失败什么都没有,而且手册页面给人留下了深刻的印象。
发布于 2022-03-10 15:46:00
当您使用expect控制另一个程序时,它通过伪终端(pty)连接到该程序,因此期望看到程序的输出与终端上的输出相同,特别是stdout和stderr之间没有区别。假设您的mycommand将在本地机器上执行,您可以使用这样的脚本作为expect (而不是bash)脚本:
#!/usr/bin/expect
spawn sshuttle -r myhost 0/0
expect "Connected to server."
exec mycommand
exec kill [exp_pid]
close如果航天飞机在stdin关闭时退出,则可能不需要exec kill,这将发生在下一行。
https://stackoverflow.com/questions/71426022
复制相似问题