パイプされたコマンドのI / Oバッファリングを防ぐ方法

パイプされたコマンドのI / Oバッファリングを防ぐ方法

次のコマンドチェーンは

  1. 日付スタンプを使用したping(UNIX)、

  2. UNIX 日付スタンプを人間が読みやすい形式に変換します。

  3. 端末ファイルとログファイルに出力されます。

ping -D localhost 2>&1 | sed 's/^\[\([0-9]*\.[0-9]*\)\]\(.*$\)/echo "[`date -d @\1 +"%Y-%m-%d %H:%M:%S"`] \2"/e' | tee -a ping.log

問題は、書かれているように、出力がpingの通常の2秒単位、1行単位の出力とは異なり、ほぼ1分または約50行単位でバッファリングされるように見えることです。

バッファリングの原因とそれを防ぐ方法は何ですか?

答え1

システムで利用可能な場合は、次を使用します。バッファリング解除。簡単なはずです。

unbuffer ping -D localhost 2>&1 | unbuffer sed 's/^\[\([0-9]*\.[0-9]*\)\]\(.*$\)/echo "[`date -d @\1 +"%Y-%m-%d %H:%M:%S"`] \2"/e' | tee -a ping.log

関連情報