LINUX.ORG.RU

История изменений

Исправление vodz, (текущая версия) :

Кажется примерно разобрался.

Увы.

Правильный ответ в том, что stdio по разному буфферизует. При выводе в файл или трубу stdio буферизует по BUFSIZ|PIPE_SIZE (обычно равно PAGE_SIZE), а при выводе в терминал - построчно. Естественно, когда программа завершается, то libc-шный exit вызывает тоже flushall().

Поэтому первый grep на терминал выводит сразу, а в трубу - ждёт.

PS: То что в скобках - это просто инлайновая запись скрипта, можно рассматривать как вызов одной команды «echo_and_sleep».

Исходная версия vodz, :

Кажется примерно разобрался.

Увы.

Правильный ответ в том, что stdio по разному буфферизует. При выводе в файл или трубу stdio буферизует по BUFSIZ|PIPE_SIZE (обычно равно PAGE_SIZE), а при выводе в терминал - построчно. Естественно, когда программа завершается, то libc-шный exit вызывает тоже flushall().

Поэтому первый grep на терминал выводит сразу, а в трубу - ждёт.