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]

相关内容