以下命令链是
带日期戳的 ping (UNIX),
将 UNIX 日期戳转换为更易于人类阅读的格式,以及
输出到终端和日志文件。
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
问题是,正如所写,输出似乎以几乎一分钟或约 50 行的块的形式进行缓冲,这与 ping 中通常的逐秒、逐行输出不同。
造成缓冲的原因是什么以及如何避免?
答案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