slm*_*slm 13
注意这个问题的标签。鉴于grepCentOS 6 包含的版本低于 2.11版,此答案是正确的
我不相信您可以仅使用别名来做到这一点(至少不是您编写的形式 - 请参阅@Graeme 的替代语法的答案)。
注意:我还要在这里提到,@Graeme 的解决方案虽然正确但在 CentOS 5 和 6 上不起作用。我已经确认了这一点,实际上它似乎grep是捆绑的(2.11 或更旧)版本的问题那些发行版。问题似乎是grep默认情况下,当-r开关没有提供路径参数时,不搜索 STDIN 。运行grep -rnIi --color "string"只是无限期挂起,试图搜索标准输入。
别名不能接受传递给它们的参数。它们更像是宏的同义词,在那里它们可以被 shell 扩展为其他东西。
$ alias ll='ls -l'
Run Code Online (Sandbox Code Playgroud)
然后可以像这样使用:
$ ll
-or-
$ ll somedir
Run Code Online (Sandbox Code Playgroud)
但somedir不会传递给ll,而是在您的命令中ll扩展到ls -l然后替换ll。
您可以改用 shell 中的函数。函数可以接受参数。
$ function mygrep { grep -rnIi "$1" . --color; }
Run Code Online (Sandbox Code Playgroud)
然后像这样使用它:
$ mygrep "blah"
Run Code Online (Sandbox Code Playgroud)

这实际上可以是别名。The--color不必在最后,如果没有给出目录选项grep,-r则始终搜索当前目录(至少 GNUgrep是这样)。因此你可以这样做:
alias mygrep='grep -rnIi --color'
Run Code Online (Sandbox Code Playgroud)
默认情况下搜索当前目录的行为是在GNU grep 2.11. 从变更日志:
如果没有给出文件操作数,并且给出了命令行 -r 或等效选项,grep 现在搜索工作目录。以前 grep 忽略 -r 并以非递归方式搜索标准输入。在 GREP_OPTIONS 中找到的 -r 没有这种新效果。
因此,在 的版本>=2.11上GNU grep,别名的用法如下:
mygrep PATTERN [PATH...]
Run Code Online (Sandbox Code Playgroud)
对于grep在此之前的版本,每次@slm使用函数的答案时您都必须指定路径是最好的方法。虽然您可以通过编写这样的函数来实现与上述相同的用法:
mygrep () { grep -rnIi --color "$1" "${2:-.}"; }
Run Code Online (Sandbox Code Playgroud)
当然,假设没有要求--color像 Q 中那样在最后......