Existe um pipe de linha por linha?

5

Lembro-me de ter lido em algum lugar (depois esqueci onde) sobre um tipo raramente usado de tubo bash 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. Eu procurei em todos os documentos básicos que eu posso colocar minhas mãos, mas não consigo descobrir se esse 'cachimbo' realmente existe.

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

    
por bntser 11.10.2013 / 01:05

2 respostas

7

Eu acho que você está procurando por xargs? Então, digamos que eu quero 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, canaliza o resultado e remove o arquivo.

link

    
por 11.10.2013 / 01:19
3

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 através de um pipe.

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

$ od -c /tmp/fifo | more

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

$ unbuffer od -c /tmp/fifo | more

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

$ process1 | unbuffer -p process2 | process3

Referências

por 11.10.2013 / 01:29

Tags