我们有以下用例:
这种方法存在几个问题:
到目前为止,我们已经做了一个合理的睡眠"在第二个终端的开头,只是等待第一个命令进行发布并且/ dist文件夹存在。问题是在较慢的计算机上这个睡眠时间是不够的(第二个命令在第一个命令有足够的时间创建/ dist文件夹之前开始执行)。在快速计算机上,第一个命令完成得相当快,并且在第二个命令启动之前有一个相当尴尬的等待时间。出于开发目的,这非常烦人。
有没有办法自动化这两个步骤?
改写:
有没有办法制作终端X,启动辅助终端Y并等待终端Y在执行某些操作之前输出某个字符串。当终端Y一遍又一遍地输出所述字符串时,最好做同样的动作。
如果可能的话,我们更喜欢Windows解决方案,但如果找不到解决方案,Linux也是一种选择。
答案 0 :(得分:0)
本答案适用于Linux解决方案;
所以,第一部分:自动启动两个终端。
一旦自动化,终端是否需要被任何人真正看到?如果没有,我会在屏幕上运行它们。 screen
命令允许您创建虚拟终端,可以根据需要进行附加和分离。要在运行命令的情况下自动启动屏幕,请使用
screen -S meaningful_service_name -d -m ./ ProcessA
这里,“-S”将屏幕名称设置为人类可读的,稍后可以引用,“-d -m”表示以分离模式启动屏幕(适用于启动脚本),并运行跟在里面的命令。这些屏幕将在后台运行(直到程序退出或杀死它们),并且可以由用户通过screen -r meaningful_service_name
从终端连接。然后用户可以通过按Ctrl-A然后按D.断开连接。还允许您通过SSH远程监控进程。
-
这导致第二部分:仅在A打印到屏幕后启动ProcessB。 屏幕允许我们采用其当前输出的所谓“屏幕截图”。这被保存为文本文件,因为(虚拟)终端是基于文本的。
screen -S meaningful_service_name -p 0 -X hardcopy /some/file/location.txt
这里,“ - p”表示基本上是当前窗口(通常应为零),“ - X”表示执行以下命令。现在您有一个带有ProcessA输出的文本文件,您可以像搜索任何其他文本文件一样进行搜索。
#!/bin/bash
while true; do
screen -S meaningful_service_name -p 0 -X hardcopy /some/file/location.txt
if [[ $(cat /some/file/location.txt | grep "ProcessA's Output" | wc -l) -ge 1 ]]
then
break
fi
sleep 2
done
./ ProcessB