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