¿Existe una herramienta que tomará la entrada de múltiples archivos o tuberías y la escribirá en stdout, sin bloquear las lecturas, de modo que las líneas de entrada individuales salgan intactas? Básicamente quiero multiplexar un montón de entradas en una salida sin líneas de bloqueo.
$ combine file1 <(prog2) ... > nice-output.txt
- No me importa el orden de salida
- No debe bloquearse mientras alguna entrada tenga datos
- Debería ser eficiente (es decir, puedo rechazar su Perl one-liner;)
-L
ejecutar un comando y fusionar la salida con la secuencia actual y-a
escribir la salida en un archivo. Buscaré más mañana. Si das un ejemplo más detallado, intentaré trabajarlo.Si los procesos escriben las líneas en una sola
write
llamada, lo que requiere que los procesos utilicen el almacenamiento en línea (generalmente desactivado si su salida estándar no es un terminal), puede señalarlos a una tubería.Si los procesos sólo realizan búfer línea al escribir en un terminal, el camino más fácil es utilizar
script
. Es un poco torpe: solo puede escribir en un archivo.Si los programas escriben líneas largas o simplemente no usan el almacenamiento en línea, este enfoque no funcionará. Necesitará un programa colector que lea y proteja las líneas de cada entrada por separado y realice la sincronización en las terminaciones de línea. No hay una utilidad estándar con esta funcionalidad. Me segunda sugerencia de Caleb de
multitail
.Aquí hay un script de Python que lee líneas producidas por varios comandos y las escupe en su salida estándar, sin dividir una línea. No lo he probado mucho, así que advertir al usuario. No lo he comparado en absoluto.
Uso de la muestra:
fuente
Sí, el multitail parece vinculado a la noción de una "ventana" como un subconjunto de un terminal; No pude lograr que funcionara bien como un componente de tubería.
Parece que tenemos que hacer esto nosotros mismos rompemos los nudillos
Ahhh eso se sintió bien.
(nota: se ha probado en aproximadamente dos conjuntos de entradas. los errores pueden o no existir)
fuente