我无法弄清楚如何解决这个问题。我有一个功能,我发送一个目录和一个单词。我想搜索该目录中包含该单词的所有文件,但如果我无法读取它们,我想打印自己的错误。这就是我所拥有的:
find $1 -type f -print0 | xargs -0 grep "$2" || error 3 "You can not read the archive."
其中:
它可以工作,但关键是如果我找到一个不可读的文件,我得到了grep错误,我不希望它出现。你知道我能做些什么来解决这个问题吗?
提前谢谢。
编辑:好的,如果我使用它:
result=$(find $1 -type f -print0 | xargs -0 grep -s "$2" || error 3 "You can not read the archive.")
它只保存错误一次,如果我想为每个存档打印一次错误,我该怎么办?
答案 0 :(得分:1)
在这种情况下,我会想到两个选项:
1)将stderr
重定向到/dev/null
(/dev/null
作为空设备,"丢弃"发送给它的任何输入),例如:
grep "$2" 2> /dev/null
2)如果您使用GNU
grep
,那么选项grep -s
将适用于您,例如:
grep -s "$2"
来自grep
手册:
-s, - no-messages 禁止有关不存在或不可读文件的错误消息。可移植性说明:与GNU grep不同,第7版Unix grep没有 符合POSIX,因为它缺少-q和它的-s选项表现得像 GNU grep' s -q选项。 USG风格的grep也缺少-q但是-s选项 表现得像GNU grep。便携式shell脚本应该避免使用-q和 -s并应将标准和错误输出重定向到/ dev / null。 (-s由POSIX指定。)