
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 unbuffer
em algumas situações. Para usar unbuffer
em um pipeline, use o sinalizador -p.
$ process1 | unbuffer -p process2 | process3