例如,这是我正在使用的命令:
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