Simplu, bufferingul se face la output (adica scrie pe stdout cate o
linie sau cate un calup). Rasnita pe care merge are un grep care face
implicit line-buffering (vezi grep -V) .

Ca sa simulezi pe aia pe care nu merge, try:

tail -f | grep --line-buffered | grep

Echivalentul perl al lui grep --line-buffered ar fi ceva gen:

do_something | perl -lne 'BEGIN {$|=1} print if /regexp/' | do_something_else

chestie care dupa parerea mea e mai portabila cu mai putine surprize
decat grepurile mai mult sau mai putin posixoase sau gnuiste.


Nu cred ca ne intelegem. Pe ambele risnite, tail -f file | grep string face acelasi lucru, anume prezinta cite o linie imediat ce aceasta apare in file.
Comportamentul se schimba cind se mai adauga un | grep.

Anyway, surpriza emisiunii este ca versiunea de grep este aceeasi (2.5.1) si, desi nu scrie in man, si cea de pe risnita cu buffer mare suporta optiunea --line-buffer.

De unde anume se seteaza optiunile implicite pentru grep ? Si de ce anume primul grep din sir se comporta intr-un fel (line buffer) cind scrie pe stdout, dar altfel (buffer mare) cind scrie catre un pipe ?


_______________________________________________
RLUG mailing list
RLUG@lists.lug.ro
http://lists.lug.ro/mailman/listinfo/rlug

Raspunde prin e-mail lui