2014-12-04 64 views
3
(echo foo && sleep 1 && echo bar) | grep -P . | tee /dev/null 

上面的代碼是我能想出的問題的最小案例。預期的行爲是foo會被echo'd,第二個會通過,然後bar會被echo'd。grep,tee和睡覺不在一起玩

實際情況是,第二次通過然後foobar被同時回顯。如果刪除或者greptee命令(或者顯然)都會發生正確的行爲。但是與他們在一起它不是。

我認爲這是某種緩衝問題,但我不知道如何解決它。這段時間裏我正在執行的腳本運行了很長一段時間,直到最後纔看到任何日誌消息。 HALP! :(

+0

可能重複。[bash下力exec'd過程中有緩衝的標準輸出] (http://stackoverflow.com/questions/3332045/bash-force-execd-process-to-have-unbuffered-stdout) – 2014-12-04 02:36:37

+3

通過'正確'和'預期',你的意思是'所需'。你看到的行爲是無論是正確的還是預期的。 – 2014-12-04 02:43:25

+0

http://mywiki.wooledge.org/BashFAQ/009 – tripleee 2014-12-04 06:53:20

回答

4

伊坦的評論促使我通過grep的的男子頁看,我發現--line-buffered標誌並稱,解決了這一問題

(echo foo && sleep 1 && echo bar) | grep --line-buffered -P . | tee /dev/null