3

agBash while ループで( 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

出力:

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;

ファイル名を常にインラインで取得するにはどうすればよいですか?

4

1 に答える 1

6

使用を避けることができます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これを強制的に許可するオプションが必要でしょうか?

于 2016-12-05T19:54:20.883 に答える