¿Existe un tubo bash línea por línea?

¿Existe un tubo bash línea por línea?

Recuerdo haber leído en alguna parte (luego olvidé dónde) sobre un tipo de canal bash raramente usado que podía redirigir la salida línea por línea. En otras palabras, en lugar de redirigir la salida una vez al final, la salida se redirigiría para cada nueva línea y se ejecutaría el proceso de recepción varias veces. He buscado en todos los documentos de bash que he podido conseguir, pero no puedo determinar si esta 'tubería' realmente existe.

¿Existe algo llamado tubería línea por línea? Por supuesto, la tarea podría realizarse fácilmente de otras formas, pero tengo curiosidad por saber si existe una forma más elegante.

Respuesta1

¿Creo que estás buscando xargs? Digamos que quiero encontrar todos los archivos .bak en un directorio y eliminarlos.

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

Para cada archivo que se encuentra, canaliza el resultado y elimina el archivo.

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

Respuesta2

Creo que estás pensando en la herramienta unbuffer. Puede usarlo para deshabilitar el almacenamiento en búfer que se produce cuando la salida se envía de un comando a otro a través de una tubería.

Con un comando como este, no verá ningún resultado hasta que el valor de las páginas se haya almacenado en el búfer:

$ od -c /tmp/fifo | more

Puede desactivar este almacenamiento en búfer automático de la siguiente manera:

$ unbuffer od -c /tmp/fifo | more

Normalmente, el unbuffer no lee desde STDIN. Esto simplifica el uso de unbufferen algunas situaciones. Para usarlo unbufferen una canalización, use el indicador -p.

$ process1 | unbuffer -p process2 | process3

Referencias

información relacionada