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]