Max*_*xHQ 2 bash while-loop ag
在Bash while 循环中使用ag( edit: version 0.33.0 ) 时,我无法让它显示任何文件名:
#!/bin/bash
cat <<__m | while read mod; do ag --nogroup --filename --ignore=local "^use $mod" ./; done
CGI
CGI::Push
__m
Run Code Online (Sandbox Code Playgroud)
输出:
use 4.08;
use 4.08;
...
Run Code Online (Sandbox Code Playgroud)
当直接在命令行上执行它时,它的工作原理是:
ag --nogroup --filename --ignore=local "^use CGI" ./
Run Code Online (Sandbox Code Playgroud)
输出:
dir/file/ModA.pm:12:use CGI 4.08;
dir/file/ModB.pm:1:use CGI 4.08;
Run Code Online (Sandbox Code Playgroud)
我怎样才能始终获得内联文件名?
您可以避免使用while read:
#!/bin/bash
for mod in CGI CGI::Push ; do
ag --nogroup --filename --ignore=local "^use $mod" ./
done
Run Code Online (Sandbox Code Playgroud)
我相信您的问题实际上是因为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;
}
}
Run Code Online (Sandbox Code Playgroud)
由于您在 下运行while read,因此您stdin不是 TTY,因此opts.search_stream最终被设置为 1。这会导致opts.print_path被设置为PATH_PRINT_NOTHING。因此,以这种方式运行时,您的路径不会打印。也许ag需要一个选项来强行允许?
| 归档时间: |
|
| 查看次数: |
780 次 |
| 最近记录: |