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

时间:2012-12-11 07:29:52

标签: perl bash redirect output

我有以下命令行,每秒输出vmstat,每行都有一个时间戳,通过perl脚本:

vmstat 15 | /home/Beer/addtimestamp.pl > File_1 

addtimestamp.pl的内容:

!/usr/bin/perl
while (<>) { print localtime() . ": $_"; }

那么为什么输出不会被重定向到“File_1”文件?

当我不这样做时,它完美地工作,它每秒都完美地打印输出,完全没有问题。

1 个答案:

答案 0 :(得分:4)

当输出到终端时,perl的输出是行缓冲的,因此您将看到输出的每一行。当它的输出是一个文件时,它将被块缓冲,因此在完整块准备好写入之前你不会看到任何输出(我认为是4k,但是可变和系统定义)。

您需要设置stdout才能使用行缓冲:

$|=1;

搜索[perl line buffered output],你会看到很多关于此的结果。