Considere el siguiente comando:
bash -c "echo x; cat 1" | tee 1.
Tengo entendido que se bifurcaría a un nuevo shell, escribiría xen stdout, escribiría file 1 not founden stderr, saldría y devolvería el control al proceso padre, y escribiría xen stdout y to 1. Por lo tanto, esperaría que el resultado final fuera x, y el archivo 1contiene exactamente la cadena x.
Sin embargo, éste no es el caso. En realidad, el archivo 1generalmente contiene al menos dos instancias xy, a veces, miles de líneas de xs. En una prueba por lotes de ejecutar el comando diez mil veces, el número medio de xs escritos en el archivo fue 52.3, y la mediana fue 1. ¿Qué mecánico está causando esto? ¿Qué distribución de probabilidad modela este comportamiento? Sospecho que es condicionalmente geométrico y por lo demás uniforme.

teeha abierto el archivo para escribir antes de abrirlocatpara leer, puede obtener muchosx-es en el archivo. En ese caso, el "ciclo" terminaría siempre que lascatlecturas fueran más rápidas que lasteeescrituras, llegando al final del archivo.xs escritos en el archivo fue de 4.35. Supongo que dependerá mucho de la carga de la máquina.Respuestas:
Esta es muy curiosa, así que traté de investigarla con la ayuda de strace. Ejecutó su comando en un bucle 1000 veces:
Encontré el archivo con la mayoría de las líneas (
wc -l */1 | sort -nr | head -n2) y verificó el correspondientetrace.log. Ciertamente puedo ver muchos:Donde 7567 es
tee 1y 7568 escat 1. Los dos definitivamente se alternan, así que sí, como se sospecha, se trata del momento de la ejecución (e imagino el cambio de contexto) de los dos comandos.fuente