Por que o piping para o mesmo arquivo não funciona em algumas plataformas?

No cygwin, o código a seguir funciona bem

$ cat junk
bat
bat
bat

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

$ cat junk
zat
zat
zat

Mas no shell linux (GNU / Linux), parece que a sobrescrita não 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 os ambientes executam o BASH.

Eu estou perguntando isso porque às vezes depois que eu faço manipulação de texto, por causa desta ressalva, sou forçado a fazer o arquivo tmp. Mas eu sei em Perl, você pode dar um sinalizador "i" para sobrescrever o arquivo original depois de algumas operações / manipulações. Eu só quero perguntar se existe algum método infalível no unix pipeline para sobrescrever o arquivo que eu não conheço.

questionAnswers(5)

yourAnswerToTheQuestion