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.