如何将以下命令转换为 bash 别名?
find . -name '*.php' | xargs grep --color -n 'search term'
我可以在哪里指定文件扩展名和“搜索词”显然是搜索词:)
所以我想做的是:
searchFiles 'php' 'search term'
如何将输入传递给别名?我应该只创建一个 bash 脚本并让别名指向脚本吗?
使用函数怎么样?将此添加到您的 .bashrc 中:
function searchFiles() {
find . -name \*."$1" -print0 | xargs -0 grep --color -n "$2"
}
然后像这样使用它:
$ searchFiles c include
您可以使用别名,但使用函数,如 Gonzalo 展示的那样,是明智的做法。
alias searchFiles=sh\ -c\ \''find . -name \*."$1" -type f -print0 | xargs -0 grep --color -Hn "$2"'\'\ -
无论是函数还是别名,我建议使用-print0
with find和-0
with xargs。这提供了更强大的文件名处理(最常见的是文件名中的空格)。
当一个函数工作时,它不会被其他程序和脚本调用(没有很多痛苦)。(别名也会有同样的问题。)我会选择一个单独的脚本,因为听起来你想直接调用它:
#!/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" .
(不需要找到你所拥有的。)
如果这仅在另一个脚本中使用而不是直接使用,则函数会更容易。
Shell 函数很好,但您可能还想看看ack。它使用颜色编码处理特定于文件的搜索,因此您的示例只是
ack --php somepattern