Bash:如何监听另一个运行程序的输出



假设我有两个bash脚本(p1.shp2.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!"

工作流程是:

  1. Runp1.sh
  2. 获取p1程序的pid
  3. p2.sh监听p1进程的输出(而不是在p2.sh内部调用p1.sh),并判断p1的输出。

如何实现它呢?谢谢!

您可以在p2.sh中包含以下任何一行。只有当达到p1.sh中期望的结果时,这些命令才会退出到下一行。

  1. 如果您的目的是查看日志的内容,请在

    tail -f <p1_log> |grep -m1 'goodbye'
    

    当p1_log显示goodbye时,该命令将退出。这需要p2.sh在p1.sh之前启动,因为p2.sh遵循/监视p1.sh的日志。

  2. 如果您想检查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