有以下命令行,通过 perl 脚本每秒输出 vmstat,并在每行上显示时间戳:
vmstat 15 | /home/Beer/addtimestamp.pl > File_1
addtimestamp.pl 的内容:
!/usr/bin/perl while (<>) { print localtime() . ": $_"; }
那么为什么输出没有被重定向到“File_1”文件呢?
当我不这样做时它工作得很好,它每秒完美地打印出输出,没有任何问题。
答案1
你陷入了缓冲陷阱。 Perl 缓冲其输出,并且仅在缓冲区已满时才将其写入磁盘。缓冲在性能方面是一件好事,但在低数据速率下可能会令人困惑。如果您等待足够长的时间,您会注意到您的文件正在被写入(使用 进行检查tail -F File_1
)。我相信标准缓冲区的大小是 4kB。
添加$|=1
如下内容以禁用 Perl 中的缓冲:
vmstat 1 | perl -e '$| = 1; while (<>) { print localtime() . ": $_"; }' > /tmp/fileetje