例如,這是我正在使用的命令:
tr -d '\n' < newfile.ppm
我想將結果輸出到完全相同的文件中,所以我現在正在做:
tr -d '\n' < newfile.ppm > newfile.ppm
為什麼這不起作用以及如何讓它起作用?
答案1
這是一個極為常見的「陷阱」。
當您重新導向 stdout 或 stderr 以寫入檔案時,shell 將首先截斷該檔案以準備寫入。所以發生的事情大致如下:
- 您的 shell 將 stdin 設定為
newfile.ppm
- 你的 shell 被截斷
newfile.ppm
為長度 0 - 您的 shell 將 stdout 設定為
newfile.ppm
- 你的 shell 運行
tr -d '\n'
。正如你所看到的,此時, 的內容newfile.ppm
已經消失了,所以沒有什麼可讀的。
要解決此問題,只需輸出到另一個檔案即可。之後您可以重命名它
答案2
這將完成你想要的工作。
[stephan@stephan] ~
$ echo "meh
" > file
[stephan@stephan] ~
$ cat file | tr -d '\n' > file ; cat file
meh