Existe um bash pipe linha por linha?

Existe um bash pipe linha por linha?

Lembro-me de ter lido em algum lugar (depois esqueci onde) sobre um tipo de tubo bash raramente usado que poderia redirecionar a saída linha por linha. Em outras palavras, em vez de redirecionar a saída uma vez no final, a saída seria redirecionada para cada nova linha e executaria o processo de recebimento várias vezes. Examinei todos os documentos do bash que consegui encontrar, mas não consigo descobrir se esse 'tubo' realmente existe.

Existe algo como um tubo linha por linha? É claro que a tarefa poderia ser facilmente realizada de outras maneiras, mas estou curioso para saber se existe uma maneira mais elegante.

Responder1

Acho que você está procurando xargs? Digamos que eu queira encontrar todos os arquivos .bak em um diretório e excluí-los.

find . -name "*.bak" -type f -print | xargs /bin/rm -f

Para cada arquivo encontrado, ele canaliza o resultado e remove o arquivo.

http://www.cyberciti.biz/faq/linux-unix-bsd-xargs-construct-argument-lists-utility/

Responder2

Acho que você está pensando na ferramenta unbuffer. Você pode usá-lo para desabilitar o buffer que ocorre quando a saída é enviada de um comando para outro por meio de um canal.

Com um comando como este, você não verá nenhuma saída até que o valor de uma página seja armazenado em buffer:

$ od -c /tmp/fifo | more

Você pode desativar esse buffer automático da seguinte maneira:

$ unbuffer od -c /tmp/fifo | more

Normalmente, o unbuffer não lê STDIN. Isso simplifica o uso unbufferem algumas situações. Para usar unbufferem um pipeline, use o sinalizador -p.

$ process1 | unbuffer -p process2 | process3

Referências

informação relacionada