我在“~/.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 .
当然,你可以.
用任何目录替换。我认为使用别名更直观,别名就是别名,函数可以做任何事情。