这个问题看上去很简单,但目前我还没能给出一个合理的解释。假设我用它tr
来转换一些随机文本(可以是任何程序),并想将结果输出到原始文件中。
a@MacBook-Pro:~/Downloads$ cat test_file
this is a sample text
a@MacBook-Pro:~/Downloads$ tr 't' 'T' <test_file >test_file
a@MacBook-Pro:~/Downloads$ cat test_file #prints nothing
是否有任何特定规则/事物告诉我们不能同时将输入和输出重定向到同一文件?我显然知道我可以将输出重定向到新文件,然后复制结果,但我对这种行为非常好奇。
附言我一直在使用 Macbook,但在这种情况下这应该不重要
答案1
>test_file
截断文件。然后读取一个空白文件并且不向其中写入任何内容。
sponge
如果您不想创建新文件则使用。
tr 't' 'T' <test_file | sponge test_file
超级用户也给出了一个很好的答案来解决这个问题:为什么将文件输出重定向至其自身会产生一个空白文件?
PS:我假设您在 Mac 上运行 Ubuntu。