要仅获取git grep
打印的文件,我可以
$ git grep "search" | cut -d':' -f1
所以我制作了一个简短的帮助脚本cutg
,我可以将其传递到~/bin/
dir。
#!/bin/sh
while read data; do
echo "$data" | cut -d':' -f1
done
所以现在我可以做到
$ git grep "search" | cutg
但它很慢。
为什么这样?如何使它像第一个命令一样快?
答案 0 :(得分:2)
脚本应该只是:
cut -d':' -f1
或(更好)
exec cut -d':' -f1
Shell循环很慢 - 特别是如果它们在每次迭代时调用一个进程,特别是如果它们无用的话。
答案 1 :(得分:1)
您的循环读取每行输入,为每行创建一个新的cut
进程。原始单行使用单个cut
进程进行所有输入。值得庆幸的是,您可以继承脚本的标准输入,只需编写
#!/bin/sh
exec cut -d: -f1 "$@" -
除了使用适当的cut
调用替换自己之外,您的脚本根本不需要执行任何操作。我已添加"$@"
,以防您想为cut
提供其他参数,但如果您确定不需要,我们可以放心地将其保留。