localizar(1) armazena em buffer sua saída

localizar(1) armazena em buffer sua saída

Estou usando locate(1)o GNU findutils para uma pequena tarefa e parece que ele armazena sua saída. Estou canalizando a saída de localizar para outra tarefa que processará as linhas conforme localizar as encontra. Como o local pode levar muito tempo para ser executado, pensei que o local imprimiria os arquivos assim que fossem encontrados, mas parece que o local está armazenando em buffer a saída.

Se eu executar localizar em um TTY, ele imprimirá a primeira correspondência imediatamente e usará talvez 10 segundos para encontrar o restante das correspondências.

Se, em vez disso, eu executar localizar, mas canalizar para cat, não verei nada até que todo o comando seja concluído.

Parece que localizar armazena em buffer a saída e não tem como desligá-la.

O que eu quero alcançar é localizar alguns arquivos e executar um comando imediatamente após encontrá-lo, canalizando a saída.

locate something | xargs -n 1 do_something

Mas o que acontece é que xargs e, portanto, do_something não são invocados até que find seja concluído.

Responder1

É claro que encontrei a resposta imediatamente após postar, em umpostagem sugerida por stackexchange ao postar.

unbuffer(de expect) resolve isso.

unbuffer locate something | xargs -n 1 do_something

executa os comandos o mais rápido que o local pode encontrá-los.

Responder2

locatearmazena em buffer o fluxo STDOUT, você precisa tornar o STDOUT locatesem buffer (ou buffer de linha).

Se você estiver em um sistema GNU, poderá usar stdbuf(vem com GNU coreutils).

Para tornar o STDOUT sem locatebuffer:

stdbuf -o0 locate something | ...

Linha armazenada em buffer:

stdbuf -oL locate something | ...

Verifique man stdbufpara ter mais ideia.

informação relacionada