Для чистого потока (например, вывод команды) вы можете использовать 'tee', чтобы разветвлять поток и отправлять один поток в заголовок и один в хвост. Для этого необходимо использовать функцию '> (list)' в bash (+ / dev / fd / N):
( COMMAND | tee /dev/fd/3 | head ) 3> >( tail )
или с использованием / dev / fd / N (или / dev / stderr) плюс вспомогательные оболочки со сложным перенаправлением:
( ( seq 1 100 | tee /dev/fd/2 | head 1>&3 ) 2>&1 | tail ) 3>&1
( ( seq 1 100 | tee /dev/stderr | head 1>&3 ) 2>&1 | tail ) 3>&1
(Ни один из них не будет работать в csh или tcsh.)
Для чего-то с немного лучшим управлением, вы можете использовать эту команду perl:
COMMAND | perl -e 'my $size = 10; my @buf = (); while (<>) { print if $. <= $size; push(@buf, $_); if ( @buf > $size ) { shift(@buf); } } print "------\n"; print @buf;'