gpt4 book ai didi

linux - bash:在 stdout 上触发输出

转载 作者:太空狗 更新时间:2023-10-29 11:48:37 25 4
gpt4 key购买 nike

我运行一个程序,它向 stdout 写入大量内容。一段时间后,该程序将定义的行打印到 stdout,我需要触发它才能并行调用函数(无需终止第一个程序)。

我如何在 bash 中执行此操作?


稍微解释一下:我需要运行一个安装程序,它是已安装的 dvd1.iso 的可执行文件。一段时间后,它会打印“信息:弹出 DVD 1 并插入 DVD 2 以继续。”。这是自动完成的。



按照这里的回答,我的测试设置:

talker.sh

#!/bin/bash

for VAR in {1..20}
do
sleep 1s
echo "huhu $VAR"
done

listener.sh

#!/bin/bash

bash talker.sh \
| tee output.txt \
| grep --line-buffered "huhu 3" \
| ( while read -r line; do echo "found"; done; ) &\
tail -f output.txt

及其运作方式:

$ bash listerner.sh 
huhu 1
huhu 2
huhu 3
found
huhu 4
huhu 5
...

最佳答案

您可以使用 tee 将第一个程序的输出保存在一个文件中,同时过滤输出以获得所需的模式。像这样的东西:

./program | tee output.txt | grep --line-buffered pattern | ( while read -r line; do something; done; )

正如@thatotherguy 在下面的评论中所建议的那样,选项 --line-buffered 应该阻止 grep 保留匹配项。

关于linux - bash:在 stdout 上触发输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54100638/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com