假设我有两个bash脚本(p1.sh
和p2.sh
),代表两个程序:
#!/bin/bash
echo "hello"
sleep 10s
echo "good morning"
sleep 10s
echo "goodbye !!"
和p2.sh
:
#!/bin/bash
# listen to the output of p1's program
# if p1 gives "goodbye !!" output, echo "p1 said goodbye!"
工作流程是:
- Run
p1.sh
- 获取
p1
程序的pid - 让
p2.sh
监听p1
进程的输出(而不是在p2.sh
内部调用p1.sh
),并判断p1
的输出。
如何实现它呢?谢谢!
您可以在p2.sh中包含以下任何一行。只有当达到p1.sh中期望的结果时,这些命令才会退出到下一行。
-
如果您的目的是查看日志的内容,请在
tail -f <p1_log> |grep -m1 'goodbye'
当p1_log显示goodbye时,该命令将退出。这需要p2.sh在p1.sh之前启动,因为p2.sh遵循/监视p1.sh的日志。
-
如果您想检查p1.sh是否已经在p2.sh中完成,您可以使用
tail
命令,如下所示tail --pid=<p1_pid> -f <p1_log>
该命令将在p1结束时退出。
乐于被纠正和学习。
将p1.sh
的输出管道到while read
循环。
p1.sh | while read -r line; do
if [ "$line" = "goodby !!" ]
then echo "p1 said goodbye"
fi
done