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]