Linux 解決 grep pipe 要 4k 才會印出來

tail -F 一直把 Log 撈出來,然後 grep 出想要的內容,在即時打出來

但是,發現打出 Log 的時間並不是即時打出來的,而會累積一段時間後才打出來,要怎麼能即時將內容打出來呢?

Linux 解決 grep pipe 要 4k 才會印出來

  • tail -F xxx.log | grep abc | cat - n -

使用上述即時將 Log 送出來,但是 grep 後,卻沒有即時送出,主要是 grep 有 buffer,要 buffer 滿了,才會往外送,而這 buffer 是多少呢?

可以使用:

  1. printf "abc%01024d\n" >> xxx.log # 一次送 1024 bytes 的內容進 Log,看送多少會印出來
  2. tail -F xxx.log | grep abc | cat - n -

可以看到 grep 再 pipe 出去會有 buffer,而且要 4k 才會印出來

於是使用:stdbuf -o0 # 來達到即時送出資料的目的

改成下述即可:

  • tail -F xxx.log | stdbuf -o0 grep abc | cat - n -

就可以即時將資料 grep 並印出來囉~

作者: Tsung

對新奇的事物都很有興趣, 喜歡簡單的東西, 過簡單的生活.

發表迴響

這個網站採用 Akismet 服務減少垃圾留言。進一步了解 Akismet 如何處理網站訪客的留言資料