繁体   English   中英

bash:在标准输出上触发输出

[英]bash: trigger output on stdout

我运行了一个向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 --line-buffered选项应防止grep继续进行匹配。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM