为什么输出没有重定向到文件中?

为什么输出没有重定向到文件中?

有以下命令行,通过 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

相关内容