如何让git grep读取标准输入(stdin)?
用git grep处理标准输入并使用--function-context的方法
你可以通过临时文件/进程替换的方式绕开git grep不直接支持stdin的限制,同时保留--function-context功能,具体方法如下:
方法1:进程替换(简洁写法)
利用shell的进程替换特性,把stdin转换成git grep能识别的“虚拟文件”,直接指定给--no-index模式:
git grep --no-index --function-context "你要搜索的模式" <(cat -)
这里<(cat -)会把标准输入的内容包装成一个临时管道文件,git grep会将其当作普通未被Git管理的文件处理,完美适配--function-context选项。
方法2:临时文件(脚本场景更安全)
如果是在自动化脚本中使用,推荐用mktemp创建安全的临时文件,避免冲突:
# 创建临时文件 temp_file=$(mktemp) # 将标准输入写入临时文件 cat - > "$temp_file" # 用git grep搜索并带上函数上下文 git grep --no-index --function-context "你要搜索的模式" "$temp_file" # 用完删除临时文件 rm "$temp_file"
补充说明:--no-index并非只能搜索当前目录的文件,官方文档描述的是默认行为(不指定文件时搜当前目录未被管理的文件),但你可以直接指定任意未被Git追踪的文件路径,包括临时文件或进程替换生成的虚拟文件。
内容的提问来源于stack exchange,提问作者ks1322
相关产品推荐
相关产品推荐

