2012-12-11 4 views
2

내가 가지고있는 펄 스크립트를 통해 각 라인에 타임 스탬프 초마다 vmstat를 출력하고 다음 명령 줄 :출력이 파일로 리디렉션되지 않는 이유는 무엇입니까?

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

addtimestamp.pl의 내용 :

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

왜 아무튼 출력 결과가 "File_1"파일로 리디렉션되지 않습니까?

출력이 완벽하지 않아도 출력이 완벽하게 매 초마다 출력됩니다.

답변

4

터미널로 출력 할 때, perl의 출력은 라인 버퍼이므로 출력되는 모든 라인을 볼 수 있습니다. 그 출력이 파일 일 때, 그것은 블럭 된 버퍼가 될 것이기 때문에 전체 블럭이 쓸 준비가 될 때까지 어떤 출력도 보지 않을 것입니다 (4k 생각합니다, 그러나 변수와 시스템 정의).

당신은 라인 버퍼링 사용하는 표준 출력을 설정해야합니다 [펄 라인 버퍼링 된 출력]에 대한

$|=1; 

검색을하면 이에 대한 결과를 많이 볼 수 있습니다.

+0

위와 함께 스크립트를 시작하여 작업하게 만들었습니다. 감사합니다. 너무 많이했습니다. 단지 파일로 출력 될 때 기본적으로 버퍼가 버퍼되어 있기를 바랍니다. 다시 한번 감사드립니다 !! –

+0

Pedantically, 더 잘 작성된 것 :'local $ | = 1;' – cdarke

+0

@cdarke 'local'을 추가하면 무엇을 의미합니까? –

관련 문제