为什么我无法通过将输入作为文件本身的命令将输出保存到文件中?

为什么我无法通过将输入作为文件本身的命令将输出保存到文件中?

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

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

相关内容