gpt4 book ai didi

bash - 银银搜索器 : output file name when used in while-loop

转载 作者:行者123 更新时间:2023-12-05 01:19:10 25 4
gpt4 key购买 nike

在 Bash while 循环中使用 ag(编辑:版本 0.33.0)时,我无法让它显示任何文件名:

#!/bin/bash
cat <<__m | while read mod; do ag --nogroup --filename --ignore=local "^use $mod" ./; done
CGI
CGI::Push
__m

输出:

use 4.08;
use 4.08;
...

当直接在命令行上执行它时,它起作用了:

ag --nogroup --filename --ignore=local "^use CGI" ./

输出:

dir/file/ModA.pm:12:use CGI 4.08;
dir/file/ModB.pm:1:use CGI 4.08;

我怎样才能始终获得内联文件名?

最佳答案

您可以避免使用 while read:

#!/bin/bash
for mod in CGI CGI::Push ; do
ag --nogroup --filename --ignore=local "^use $mod" ./
done

我相信你的问题实际上是因为 ag 中的错误(?)。在 options.c 中,它会:

rv = fstat(fileno(stdin), &statbuf);
if (rv == 0) {
if (S_ISFIFO(statbuf.st_mode) || S_ISREG(statbuf.st_mode)) {
opts.search_stream = 1;
}
}

因为你在 while read 下运行,你的 stdin 不是 TTY,所以 opts.search_stream 最终被设置为 1 . 这会导致 opts.print_path 被设置为 PATH_PRINT_NOTHING。因此,以这种方式运行时不会打印您的路径。也许 ag 需要一个选项来强制允许这样做?

关于bash - 银银搜索器 : output file name when used in while-loop,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40980941/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com