首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在stderr上使用expect (以航天飞机为例)

在stderr上使用expect (以航天飞机为例)
EN

Stack Overflow用户
提问于 2022-03-10 14:42:40
回答 1查看 107关注 0票数 0

有一个名为sshuttle的程序可以连接到服务器并创建一个隧道。

我希望创建一个bash函数,其顺序如下:

    1. opens隧道到远程服务器(sshuttle -r myhost 0/0),

    1. performs 1任意命令行,

    1. kill -s TERM <pidOfTheAboveTunnel>.

一个基本的想法(可以工作,但5秒的延迟是一个问题)是类似于sshuttle -r myhost 0/0 & ; sleep 5 ; mycommand ; kill -s TERM $(pgrep sshuttle)

是否可以使用expect来期望字符串"c :连接到服务器“。是从这里收到的吗?作为一名新手,我的尝试除了失败什么都没有,而且手册页面给人留下了深刻的印象。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-03-10 15:46:00

当您使用expect控制另一个程序时,它通过伪终端(pty)连接到该程序,因此期望看到程序的输出与终端上的输出相同,特别是stdout和stderr之间没有区别。假设您的mycommand将在本地机器上执行,您可以使用这样的脚本作为expect (而不是bash)脚本:

代码语言:javascript
复制
#!/usr/bin/expect

spawn sshuttle -r myhost 0/0
expect "Connected to server."
exec mycommand
exec kill [exp_pid]
close

如果航天飞机在stdin关闭时退出,则可能不需要exec kill,这将发生在下一行。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71426022

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档