Почему выход не перенаправляется в файл?

имеют следующую командную строку, которая выводит vmstat каждую секунду с меткой времени в каждой строке через Perl-скрипт:

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

содержимое addtimestamp.pl:

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

Так почему же выход не перенаправляется в файл «File_1»?

Он отлично работает, когда я этого не делаю, он выводит выходные данные каждую секунду без каких-либо проблем.

  • Почему некоторые linux-инструменты записывают в STDERR вместо STDOUT по умолчанию?
  • Как отправить надстройку stdout в multilog и второй процесс
  • no stderr output при использовании stdbuf -o 0 | & tee log
  • Перенаправить вывод программы в файл не удается
  • Ограничить размер файла журнала
  • Почему я могу добавить файл, но не перезаписать его?
  • Как вы помните синтаксис для перенаправления 2> и 1
  • использование аргумента командной строки с перенаправлением
  • One Solution collect form web for “Почему выход не перенаправляется в файл?”

    Вы попали в буферизацию Гоча. Perl буферизует свой вывод и записывает только на диск, когда буфер заполнен. Буферизация – это хорошая работа с точки зрения производительности, но при низких скоростях передачи данных может сбивать с толку. Если вы подождете достаточно долго, вы заметите, что ваш файл написан (проверьте с помощью tail -F File_1 ). Я считаю, что стандартный буфер имеет размер 4 КБ.

    Добавьте $|=1 как показано ниже, чтобы отключить буферизацию в Perl:

     vmstat 1 | perl -e '$| = 1; while (<>) { print localtime() . ": $_"; }' > /tmp/fileetje 
    Linux и Unix - лучшая ОС в мире.