为何find+cat+grep命令中2>/dev/null无法屏蔽Permission denied错误?
问题解析:为什么STDERR屏蔽没生效?
你的理解存在疏漏,核心问题出在重定向的作用范围上:
- 你写的
2>/dev/null是附加在整个管道的末尾,它只会对管道最后一个命令(也就是grep)的标准错误(stderr)生效,而find -exec调用的cat命令,它的stderr并没有被重定向,所以读取文件时的权限拒绝错误会直接输出到终端。 - 要正确屏蔽
cat的错误,需要把重定向放到-exec的命令范围内,修改后的命令如下:
这样find /etc/sudoers.d -type f -exec cat {} 2>/dev/null + | grep kalicat命令的stderr会被直接丢去/dev/null,只有cat成功读取的文件内容会被传递给grep处理。
如果还需要屏蔽find命令自身可能出现的权限错误(比如无法访问某些子目录),可以给find也加上stderr重定向:
find /etc/sudoers.d -type f 2>/dev/null -exec cat {} 2>/dev/null + | grep kali
内容的提问来源于stack exchange,提问作者Vikash
相关产品推荐
相关产品推荐

