我想获取 csearch 输出并为其着色。看起来像这样:
/home/bp/whatever.txt:1:foo
这有效:
csearch -n -- $term \
| env GREP_COLORS='mt=02;35' grep --color=always -P '^[^:]+:[^:]+:' \
| grep -P --color=always -- $term \
| less -RFX
csearch
然而,在显示任何内容之前,它会等待计算出完整的输出。
现在,如果我这样做:
csearch -n -- $term \
| env GREP_COLORS='mt=02;35' grep --color=always -P '^[^:]+:[^:]+:' \
| pv
| grep -P --color=always -- $term \
| less -RFX
...我可以看到数据流动,但如果我这样做:
csearch -n -- $term \
| env GREP_COLORS='mt=02;35' grep --color=always -P '^[^:]+:[^:]+:' \
| grep -P --color=always -- $term \
| pv
| less -RFX
...没有数据流动。第二个grep
似乎正在等待 EOF。
添加--line-buffered
到两个 grep 似乎对我没有好处。
为什么这个命令管道等待 EOF?
答案1
我正在使用fish
,这意味着我实际上并没有使用grep
,但是:
function grep
command grep --color=auto $argv
end
这在第一个中不是问题,grep
因为它已经被 包装了env
,所以它忽略了这个函数。
更改grep
以/bin/grep
修复它。