对于某些明显的用法,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
调试起来很痛苦,根本不清楚问题出在哪里。