如何在linux中自动运行两个同时运行的终端?

如何在linux中自动运行两个同时运行的终端?,linux,bash,terminal,expect,automated-deployment,Linux,Bash,Terminal,Expect,Automated Deployment,我正在尝试远程运行模拟器 手动: 我打开三个端子(通常作为配对端子中的选项卡,但这并不重要) 首先,我运行“startemulator” 在第二种情况下,我运行“startuart”。该终端需要保持活动状态,因为它通过uart向模拟设备提供双向通信 然后,我必须等待仿真设备通过uart打印[RDY]。这大约需要10分钟,但时间是可变的 只有这样,我才能在第三航站楼运行“starthost”。然后是一些始终相同的其他命令,包括登录到主机。如果我这么做太早,在设备准备好之前,所有的麻烦都会爆发 完成

我正在尝试远程运行模拟器

手动:

我打开三个端子(通常作为配对端子中的选项卡,但这并不重要)

首先,我运行“startemulator”

在第二种情况下,我运行“startuart”。该终端需要保持活动状态,因为它通过uart向模拟设备提供双向通信

然后,我必须等待仿真设备通过uart打印[RDY]。这大约需要10分钟,但时间是可变的

只有这样,我才能在第三航站楼运行“starthost”。然后是一些始终相同的其他命令,包括登录到主机。如果我这么做太早,在设备准备好之前,所有的麻烦都会爆发

完成后,我将得到三个终端,它们都是独立有用的


我如何使这个过程自动化(不需要重新调整所有不在我控制之下、其他人依赖的底层脚本)

我希望能够键入“go”,然后去冲杯咖啡,然后回来发现所有三个终端都已设置好并在等待我


我知道我可以在第三个终端中对命令序列使用'expect',但我不知道如何让它等待在另一个终端中打印某些内容。我可以使用延迟,但这是困难和脆弱的。

如果你不能使用cron或像我建议你使用的那样。
屏幕的
启动脚本可以启动您需要的任意多个会话。我很想使用屏幕,但它能否在一个终端中启动一个进程,条件是[RDY]在另一个终端中打印?屏幕很复杂。这里可能有更多不同的解决方案,例如可以使用
screenlog
,例如
startuart
会话的输出将被记录到一个文件中,在第三个会话中,只需等待并定期检查日志文件中的
RDY
。当然,这纯粹是一种猜测,没有真正的测试。。。。另一种可能是:使用
expect
监控
startuart
的输出,当
expect
检测到
RDY
时,将使用
starthost
启动第三个会话……您可以使用fifo进行同步。在第二个终端中运行
expect
,等待
RDY
,然后写入fifo。在第三个终端中,从fifo进行读取,直到第二个终端看到
RDY
并通过fifo发送字符串为止。