Linux Alias,它有什么问题?

时间:2013-02-06 16:41:14

标签: linux alias

我有这个别名:

alias gi='grep -r -i $1 ./*'

当我做的时候

gi someString

它执行grep,但是在我提供的其他字符串上,通常带有“p /或其他类似的东西。

我正在使用类似的东西来追踪历史:

alias gh='history | grep $1'

完美无缺。

编辑:我在/ bin / bash shell上,按照echo $ SHELL。

谢谢!

3 个答案:

答案 0 :(得分:2)

alias机制仅仅取代了一个词。同一行上的任何其他单词都保留在原位,因此通常只需替换命令并保留参数即可。这对您的 grep 示例效果不佳,因为您想要重新排列该行。

现在,$1将引用shell进程(或shell函数)参数,在任何一种情况下, not 指向在同一行上键入的单词。

在这种情况下,使用shell 函数可以更好地服务,它应该适用于任何包含bash的Posix shell。

gi () {
  grep -r -i "$1" ./*
}

答案 1 :(得分:1)

您无法将参数传递给alias,有关详细信息,请参阅this post。你需要的是一个功能。尝试一下就行:

function gi() {
grep -r -i "$1" ./*
}

希望这有帮助!

P.S。:至于为什么alias gh='history | grep $1'有效是因为它与alias gh='history | grep相同。静态设置$1时会展开alias

答案 2 :(得分:0)

试试这个别名:

alias gi='find . | xargs grep -i'

如果您仍然只想使用别名来解决问题,这将有效。