Hier ist beispielsweise der Befehl, den ich verwende:
tr -d '\n' < newfile.ppm
Ich möchte die Ergebnisse in genau dieselbe Datei ausgeben und mache jetzt Folgendes:
tr -d '\n' < newfile.ppm > newfile.ppm
Warum funktioniert das nicht und wie kann ich es zum Laufen bringen?
Antwort1
Dies ist ein äußerst häufiges Problem.
Wenn Sie stdout oder stderr umleiten, um in eine Datei zu schreiben, kürzt die Shell zuerst die Datei, um sie für das Schreiben vorzubereiten. Was also passiert, ist ungefähr das Folgende:
- Ihre Shell setzt stdin auf
newfile.ppm
- Ihre Shell wird
newfile.ppm
auf die Länge 0 gekürzt - Ihre Shell setzt stdout auf
newfile.ppm
- Ihre Shell führt aus
tr -d '\n'
. Wie Sie sehen,newfile.ppm
ist der Inhalt von an dieser Stelle bereits verschwunden, es gibt also nichts zu lesen.
Um dies zu umgehen, geben Sie stattdessen einfach eine andere Datei aus. Sie können diese dann anschließend umbenennen
Antwort2
Damit erledigen Sie die gewünschte Arbeit.
[stephan@stephan] ~
$ echo "meh
" > file
[stephan@stephan] ~
$ cat file | tr -d '\n' > file ; cat file
meh