我有这个别名:
alias gi='grep -r -i $1 ./*'
当我做
gi someString
它执行 grep,但在我提供的字符串之外的其他字符串上,通常带有“p/”或其他类似的东西。
我正在使用类似的东西来获取历史记录:
alias gh='history | grep $1'
效果很好。
编辑:根据 echo $SHELL,我在 /bin/bash shell 上。
谢谢!
该alias
机制仅代替一个词。同一行上的任何其他单词都保留在原处,因此通常只需替换命令并保留参数。这不适用于您的grep示例,因为您想重新排列该行。
现在,$1
将引用shell 进程(或shell 函数)参数,在任何一种情况下,都不是在同一行上键入的单词。
在这种情况下,最好使用 shell函数,它应该适用于任何 Posix shell,包括 bash。
gi () {
grep -r -i "$1" ./*
}
您不能将参数传递给alias
,请参阅此帖子了解详细信息。你需要的是一个函数。尝试一下:
function gi() {
grep -r -i "$1" ./*
}
希望这可以帮助!
PS:至于为什么alias gh='history | grep $1'
起作用是因为它与alias gh='history | grep
. 静态$1
设置时展开。alias
试试这个别名:
alias gi='find . | xargs grep -i'
如果您仍然只想使用别名来解决您的问题,这将起作用。