¿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.