為什麼我無法透過將輸入作為文件本身的命令將輸出保存到文件中?

為什麼我無法透過將輸入作為文件本身的命令將輸出保存到文件中?

例如,這是我正在使用的命令:

tr -d '\n' < newfile.ppm 

我想將結果輸出到完全相同的文件中,所以我現在正在做:

tr -d '\n' < newfile.ppm > newfile.ppm

為什麼這不起作用以及如何讓它起作用?

答案1

這是一個極為常見的「陷阱」。

當您重新導向 stdout 或 stderr 以寫入檔案時,shell 將首先截斷該檔案以準備寫入。所以發生的事情大致如下:

  1. 您的 shell 將 stdin 設定為newfile.ppm
  2. 你的 shell 被截斷newfile.ppm為長度 0
  3. 您的 shell 將 stdout 設定為newfile.ppm
  4. 你的 shell 運行tr -d '\n'。正如你所看到的,此時, 的內容newfile.ppm已經消失了,所以沒有什麼可讀的。

要解決此問題,只需輸出到另一個檔案即可。之後您可以重命名它

答案2

這將完成你想要的工作。

[stephan@stephan] ~ 
$ echo "meh                                    
" > file
[stephan@stephan] ~ 
$ cat file | tr -d '\n' > file ; cat file 
meh

相關內容