5

如何将以下命令转换为 bash 别名?

find . -name '*.php' | xargs grep --color -n 'search term'

我可以在哪里指定文件扩展名和“搜索词”显然是搜索词:)

所以我想做的是:

 searchFiles 'php' 'search term'

如何将输入传递给别名?我应该只创建一个 bash 脚本并让别名指向脚本吗?

4

4 回答 4

8

使用函数怎么样?将此添加到您的 .bashrc 中:

function searchFiles() {
       find . -name \*."$1" -print0 | xargs -0 grep --color -n "$2"
}

然后像这样使用它:

$ searchFiles c include

于 2009-11-25T23:35:41.760 回答
5

您可以使用别名,但使用函数,如 Gonzalo 展示的那样,是明智的做法。

alias searchFiles=sh\ -c\ \''find . -name \*."$1" -type f -print0 | xargs -0 grep --color -Hn "$2"'\'\ -

无论是函数还是别名,我建议使用-print0with find-0with xargs。这提供了更强大的文件名处理(最常见的是文件名中的空格)。

于 2009-11-25T23:58:01.263 回答
1

当一个函数工作时,它不会被其他程序和脚本调用(没有很多痛苦)。(别名也会有同样的问题。)我会选择一个单独的脚本,因为听起来你想直接调用它:

#!/bin/bash
# since you're already using bash, depend on it instead of /bin/sh
# and reduce surprises later (you can always come back and look at
# porting this)

INCLUDE="*.$1"
PATTERN="$2"
grep --color -n "$PATTERN" --recursive --include="$INCLUDE" .

(不需要找到你所拥有的。)

如果这仅在另一个脚本中使用而不是直接使用,则函数会更容易。

于 2009-11-26T00:02:56.713 回答
1

Shell 函数很好,但您可能还想看看ack。它使用颜色编码处理特定于文件的搜索,因此您的示例只是

ack --php somepattern
于 2010-03-10T16:00:20.707 回答