grep --exclude-dir 동작: 버그 또는 기능?

grep --exclude-dir 동작: 버그 또는 기능?

grep -r --exclude-dir나는 행동에 불안한 변화가 있음을 발견했습니다. 다음 테스트를 고려해보세요.

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

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

예상되는 동작은 grep이 통과해야 하는 "testfile"을 표시하지 않는다는 것입니다 --exclude-dir. 이는 grep v2.10 및 2.11에서 작동합니다. 그러나 버전 2.12+의 경우 출력은 다음과 같습니다.

./d1/d2/testfile:1:randomtext

또한 동작이 일관되지 않습니다.

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

예상대로 출력 없이 잘 작동합니다.

나는 이것이 버그라고 믿습니다. 내 이론을 확인해 주실 수 있나요? 감사해요.

답변1

v2.11과 v2.12 사이에서 grep변경 로그에는 다음 변경 사항만 언급됩니다 --exclude-dir.

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

나는 동작의 변화가 이 수정의 부작용이라고 생각합니다(정확히 귀하의 경우입니다). 즉, 버그가 발생했지만 보시 grep다시피 v2.12 이전에도 이 경우 세그폴트가 가능했습니다. 따라서 v2.11이 안정적일 것이라고 기대하지 마십시오.

이 버그를 신고하는 것이 좋습니다.

참고: 이 분할 오류는 v2.11의 수정으로 인해 발생합니다. 문서 NEWS에는 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]

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]

관련 정보