带参数的Bash Alias失败

时间:2011-06-23 16:03:29

标签: bash grep alias

我运行以下命令来搜索文件中的文本并显示漂亮的输出:

$ grep -rnI "SEARCHTERM" . | sed 's/\:\s\+/\:\n/g'
./path/filename.php:LINENUMBER:
This line contains SEARCHTERM

但是当我尝试将其作为别名运行时,我收到错误:

$ alias lookfor="grep -rnI '\\!^' . | sed 's/\:\s\+/\:\n/g'"
$ lookfor SEARCHTERM
sed: can't read SEARCHTERM: No such file or directory

为什么我的别名失败了?我确定这是某种引用问题...

2 个答案:

答案 0 :(得分:2)

Bash(恼人地,恕我直言)不支持别名的参数。相反,我建议将你想要的东西写成一个函数(它更强大):

lookfor() {
  grep -rnI '\\!^' "$@" | sed 's/\:\s\+/\:\n/g'
}

从长远来看,功能总体上更好......如果你愿意的话,它们会让你扩展它以进行错误处理等。

答案 1 :(得分:0)

我最终创建了一个~/bin folder,并在其中放置了一个名为lookfor的可执行文件,其中包含以下内容:

#!/bin/sh
grep -rnI "$1" . | sed 's/\:\s\+/\:\n/g'

我的发行版已经确认~/bin文件夹在PATH中,但是对于那些没有自动设置的文件夹,您可以将以下内容添加到您的PATH中{{1} }}:

~/.bashrc