监视命令的连续输出并有条件地采取行动

监视命令的连续输出并有条件地采取行动

在 bash 中,我在屏幕上运行一个命令,其效果如下:

while true
do
  echo $RANDOM
  sleep 1
done

其输出为:

12396
19683
31641
...

我想将其放入类似 grep/awk 的东西中并匹配特定的模式,例如12345,我想要运行一个命令。

我不想捕获正在运行的命令的完整输出 - 它可能会运行很长时间才找到匹配项,而且我不想浪费机器空间。

这可以在 bash 中轻松完成吗?

在理想情况下,我还希望将输出继续打印到终端,这样我就可以远程控制并自己监控输出,但这不是绝对必要的。

答案1

./feeding_script.sh |
tee >(while read a; do [ "$a" == "12345" ] && </dev/null another_command; done)

笔记:

  • tee分割数据流;一份副本发送到“文件”(在本例中为命令)>(…),另一份继续发送到终端;
  • </dev/null another_command– 此重定向可防止another_command使用 生成的数据feeding_script.sh

相关内容