为什么 grep 在 "Permission Denied" 后停止工作?

Why does grep stop working after "Permission Denied"?

我执行了一个非常简单的 grep:

grep -r "someSimpleWord" .

现在,有一个目录包含一些文件,这些文件会生成一些消息,例如

grep: path/to/some/unpermitted/file: Permission denied

打印完这些消息后 grep 就停止了任何操作。它不会 return 也不会继续搜索(查看 top 输出,在打印消息后没有 grep )。 当我添加

--exclude-dir="path/to/some/unpermitted"

grep 再次按预期工作。

由于没有错误消息,我认为 grep 中存在错误,但感觉不太可能。我在这里错过了什么?

我在 Ubuntu 12.02.

编辑:考虑使用 -s 选项(抑制所有错误消息),这会让您留下空行和 grep 什么都不做。所以你等啊等啊,好吧,这可能需要一段时间。

grep 停止的文件名,./path to unpermitted/ptmx 表示它可能是一个特殊的设备文件,例如 pty mux,通常只能在 /dev/ 目录中找到。 grep 将打开它,但设备不提供任何数据,因此 grep 阻塞直到数据可用(永远不会)。

使用 grep 的 -D skip 参数。

-D ACTION, --devices=ACTION
   If an input file is a device, FIFO or socket, use ACTION to process it.  
   By default, ACTION is read, which means that devices are read just as if they  
   were ordinary files.  If ACTION is skip, devices are silently skipped.