Warum funktioniert das Weiterleiten an dieselbe Datei auf einigen Plattformen nicht?

In Cygwin funktioniert der folgende Code einwandfrei

$ cat junk
bat
bat
bat

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

$ cat junk
zat
zat
zat

In der Linux-Shell (GNU / Linux) scheint das Überschreiben jedoch nicht zu funktionieren

[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

In beiden Umgebungen wird BASH ausgeführt.

Ich frage dies, weil ich manchmal, nachdem ich Textmanipulationen durchgeführt habe, aufgrund dieser Einschränkung gezwungen bin, die tmp-Datei zu erstellen. Aber ich weiß, dass Sie in Perl das "i" -Flag angeben können, um die Originaldatei nach einigen Operationen / Manipulationen zu überschreiben. Ich möchte nur fragen, ob es eine narrensichere Methode in der Unix-Pipeline gibt, um die mir unbekannte Datei zu überschreiben.

Antworten auf die Frage(5)

Ihre Antwort auf die Frage