grep --exclude-dir behavior: um bug ou um recurso?

0

Eu notei uma alteração irritante no comportamento grep -r --exclude-dir . Considere o seguinte teste:

mkdir -p ./d1/d2
echo 'randomtext' > ./d1/d2/testfile

grep -nr --exclude-dir ./d1/d2 'randomtext'

Um comportamento esperado é que o grep não mostrará "testfile", pois ele deve ser filtrado via --exclude-dir . Isso funciona para o v2.10 e 2.11 do grep. No entanto, para as versões 2.12+, a saída é:

./d1/d2/testfile:1:randomtext

Além disso, o comportamento é inconsistente:

grep -nr --exclude-dir d1 'randomtext'
# or 
grep -nr --exclude-dir d2 'randomtext'

Trabalhe bem, sem nenhuma saída, como esperado.

Eu acredito que é um bug. Você pode por favor confirmar minha teoria? Obrigado.

    
por Zaur Nasibov 11.02.2015 / 10:29

1 resposta

3

Entre v2.11 e v2.12, o grep changelog menciona apenas a seguinte alteração sobre --exclude-dir :

grep: fix segfault with -r --exclude-dir and no file operand

Suponho que a mudança de comportamento é um efeito colateral dessa correção (que é exatamente o seu caso), ou seja, um bug foi introduzido, mas como você pode ver, grep também pode ser segfault neste caso antes da v2. 12 Portanto, não espere que v2.11 seja confiável.

Sugiro que você denuncie esse bug.

Nota: Este segfault foi devido a uma correção na v2.11. O arquivo NEWS diz para v2.11:

The --include, --exclude, and --exclude-dir options now handle
command-line arguments more consistently.  --include and --exclude
apply only to non-directories and --exclude-dir applies only to
directories.  "-" (standard input) is never excluded, since it is
not a file name.
[bug introduced in grep-2.5]

e para v2.12:

grep no longer segfaults with -r --exclude-dir and no file operand.
I.e., ":|grep -r --exclude-dir=D PAT" would segfault.
[bug introduced in grep-2.11]
    
por 11.02.2015 / 10:38

Tags