如何使这个“svngrep”别名在“.bash_aliases”上起作用?

如何使这个“svngrep”别名在“.bash_aliases”上起作用?

我在“~/.bash_aliases”文件中添加了以下行:

alias svngrep='grep -R $1 ./* --exclude-dir ".svn"'

但它不起作用。

它输出(我将其翻译为英文):

svngrep test
grep: test: File or directory not found

但使用完整的“grep”行,它就可以正常工作。

知道我的别名有什么问题吗?

答案1

$1在别名中不起作用。您需要为此定义一个函数,例如在 .bashrc 文件中。

function svngrep { grep -R --exclude-dir=".svn" "$@" . ; }

这应该可以解决问题!但是,在从命令行尝试之前,请确保您的旧别名不存在:

unalias svngrep
function svngrep { grep -R --exclude-dir=".svn" "$@" . ; }
svngrep "teststring"

引用bash 手册

没有在替换文本中使用参数的机制。如果需要参数,则应使用 shell 函数 (...) 对于几乎所有目的,别名被 shell 函数取代

答案2

您不需要 bash 函数(不过您可以使用它,这取决于个人喜好),只需$1 ./*从您的示例中删除它并按以下方式调用它:

alias svngrep='grep -R --exclude-dir ".svn"'
svngrep phrase .

或者这是我几个月来一直在使用的一个示例:

alias rg='rgrep --exclude-dir=.svn --exclude=*.pyc'
rg phrase .

当然,你可以.用任何目录替换。我认为使用别名更直观,别名就是别名,函数可以做任何事情。

相关内容