簡體   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