Bash: ¿Por qué leer y escribir en el mismo archivo en una canalización produce resultados poco confiables?

Tengo un montón de archivos que contienen muchas líneas en blanco y quiero eliminar las líneas en blanco repetidas para facilitar la lectura de los archivos. Escribí el siguiente guión:

#!/bin/bash
for file in * ; do cat "$file" | sed 's/^ \+//' | cat -s > "$file" ; done

Sin embargo, esto tuvo resultados muy poco confiables, con la mayoría de los archivos completamente vacíos y solo unos pocos archivos tienen los resultados esperados. Además, los archivos que funcionaban parecían cambiar aleatoriamente cada vez que lo intentaba, ya que los archivos diferentes se editaban correctamente en cada ejecución. ¿Que esta pasando?

Nota: Esta es una pregunta más teórica, porque me doy cuenta de que podría usar una solución como:

#!/bin/bash
for file in * ; do 
    cat "$file" | sed 's/^ \+//' | cat -s > "$file"-tmp
    rm "$file"
    mv "$file"-tmp "$file"
done

Pero eso parece innecesariamente complicado. Entonces, ¿por qué el método "directo" no es tan confiable?

Respuestas a la pregunta(2)

Su respuesta a la pregunta