[英]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.