
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 unbuffer
en algunas situaciones. Para usarlo unbuffer
en una canalización, use el indicador -p.
$ process1 | unbuffer -p process2 | process3