全局抑制 grep 目录警告

全局抑制 grep 目录警告

对于某些明显的用法,grep命令可以输出有关搜索名称是目录的多个投诉。请注意多个“是目录”警告,这通常发生在以下命令中: grep文本*

例如:

/etc/webmin # grep "log=1" * 
grep: cluster-webmin: Is a directory
config:log=1
grep: cpan: Is a directory
grep: man: Is a directory
miniserv.conf:log=1
miniserv.conf:syslog=1
grep: mon: Is a directory

我知道我可以使用“-s”选项来抑制这些有关目录的警告(并且 stderr 可以重定向到 nul,但这更糟糕),但我不喜欢那样,因为它是我们必须记住的额外样板每一个时间,也抑制了全部警告,不仅仅是关于目录的警告。

有什么办法可以在全球范围内永远抑制这种虚假警告吗?我对 Debian 和 Cygwin 最感兴趣。

答案1

根据您想要处理目录内容的方式,

  • grep -d recurse会这样做(递归处理目录),或者
  • grep -d skip(忽略目录及其内容)。

您可以通过将其添加到 ~/.profile 或 ~/.bashrc (一个用户)或 /etc/profile 或 /etc/bashrc (所有用户)来自动执行此操作

alias grep="/bin/grep -d skip" 

答案2

.profile您可以在您的或中设置别名.bashrc

alias grep='grep -s'

对于全球,你可以这样做/etc/profile/etc/bashrc

答案3

为了完整起见,GNU grep 支持一个名为 的环境变量GREP_OPTIONS。从man grep:

GREP_OPTIONS
      This variable specifies default options to be placed in front of
      any explicit options.  As  this  causes  problems  when  writing
      portable  scripts,  this  feature  will  be  removed in a future
      release of grep, and grep warns if it is used.   Please  use  an
      alias or script instead.

你可以这样做export GREP_OPTIONS=-s,但是,正如手册页所说,这也会传递给脚本,并可能无意中弄乱事情。

例如,我曾经有过一些用于构建软件的GREP_OPTIONS=--color=always混乱脚本。configure调试起来很痛苦,根本不清楚问题出在哪里。

相关内容