加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

bash序列:等待输出,然后启动下一个程序

发布时间:2020-12-16 01:07:48 所属栏目:安全 来源:网络整理
导读:在我的情况下,我必须在ssh’ing进入服务器之前运行openvpn,并且openvpn命令回显“初始化序列已完成”. 所以,我希望我的脚本设置openvpn然后ssh in. 我的问题是:你如何在后台执行bash命令并等待它在运行另一个程序之前回显“已完成”? 我目前的做法是打开2
在我的情况下,我必须在ssh’ing进入服务器之前运行openvpn,并且openvpn命令回显“初始化序列已完成”.

所以,我希望我的脚本设置openvpn然后ssh in.

我的问题是:你如何在后台执行bash命令并等待它在运行另一个程序之前回显“已完成”?

我目前的做法是打开2个终端窗格,其中一个正在运行:

sudo openvpn --config FILE

在另一个我运行:

ssh SERVER

一旦第一个终端窗格显示“初始化序列已完成”文本.

好像你想要 run openvpn as a process in the background while processing its stdout in the foreground.
exec 3< <(sudo openvpn --config FILE)
sed '/Initialization Sequence Completed$/q' <&3 ; cat <&3 &
# VPN initialization is now complete and running in the background
ssh SERVER

说明

让我们分成几块:

> echo<(sudo openvpn --config FILE)将打印出类似/ dev / fd63的内容
><(..)在后台运行openvpn,然后......
>将其stdout附加到文件描述符,该描述符由echo打印出来

> exec 3<的/ dev / fd63
>(其中/ dev / fd63是从步骤1打印的文件描述符)
>这告诉shell打开文件描述符(/ dev / fd63)进行读取,并且……
>使其在文件描述符3中可用

> sed’/初始化序列已完成$/ q’<& 3
>现在我们在前台运行sed,但是从我们刚打开的文件描述符3中读取它
>一旦sed看到当前行以“Initialization Sequence Completed”结束,它就会退出(/ q部分)

> cat<& 3&
> openvpn将继续写入文件描述符3,如果没有从中读取,最终会阻塞
>为了防止这种情况,我们在后台运行cat来读取剩余的输出

基本思路是在后台运行openvpn,但在某处捕获它的输出,以便我们可以在前台运行一个命令,直到它读取魔术词“Initialization Sequence Completed”.上面的代码尝试在不创建凌乱的临时文件的情况下执行此操作,但更简单的方法可能只是使用临时文件.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读