O pipe de saída aguarda EOF em peixes [closed]

1

Gostaria de pegar a saída do csearch e colori-la. Parece assim:

/home/bp/whatever.txt:1:foo

E isso funciona:

csearch -n -- $term \
  | env GREP_COLORS='mt=02;35' grep --color=always -P '^[^:]+:[^:]+:' \
  | grep -P --color=always -- $term \
  | less -RFX

No entanto, ele espera que a saída completa de csearch seja calculada antes que qualquer coisa seja mostrada.

Agora, se eu fizer isso:

csearch -n -- $term \
  | env GREP_COLORS='mt=02;35' grep --color=always -P '^[^:]+:[^:]+:' \
  | pv
  | grep -P --color=always -- $term \
  | less -RFX

... Eu posso ver os dados fluindo, mas se eu fizer isso:

csearch -n -- $term \
  | env GREP_COLORS='mt=02;35' grep --color=always -P '^[^:]+:[^:]+:' \
  | grep -P --color=always -- $term \
  | pv
  | less -RFX

... nenhum dado está fluindo. O segundo grep parece estar esperando por um EOF.

Adicionar --line-buffered a ambos os grep parece não me fazer bem.

Por que este pipe de comando está aguardando o EOF?

    
por badp 23.08.2016 / 16:05

1 resposta

4

Eu estava usando fish , o que significa que eu não estava realmente usando grep , mas:

function grep
    command grep --color=auto $argv
end

e blocos de códigos de peixe não transmitem seus resultados .

Isso não foi um problema no primeiro grep , já que ele já estava envolto por env , por isso ignorou essa função.

Alterar grep para /bin/grep corrigiu.

    
por 23.08.2016 / 16:10

Tags