¿Por qué canalizar al mismo archivo no funciona en algunas plataformas?

En cygwin, el siguiente código funciona bien.

$ cat junk
bat
bat
bat

$ cat junk | sort -k1,1 |tr 'b' 'z' > junk

$ cat junk
zat
zat
zat

Pero en el shell de Linux (GNU / Linux), parece que la sobrescritura no funciona

[41] othershell: cat junk
cat
cat
cat
[42] othershell: cat junk |sort -k1,1 |tr 'c' 'z'
zat
zat
zat
[43] othershell: cat junk |sort -k1,1 |tr 'c' 'z' > junk
[44] othershell: cat junk

Ambos entornos ejecutan BASH.

Estoy preguntando esto porque a veces después de manipular texto, debido a esta advertencia, me veo forzado a hacer el archivo tmp. Pero sé que en Perl, puede dar la marca "i" para sobrescribir el archivo original después de algunas operaciones / manipulaciones. Solo quiero preguntar si hay algún método infalible en la canalización de Unix para sobrescribir el archivo que no conozco.

Respuestas a la pregunta(5)

Su respuesta a la pregunta