此命令执行cat t.txt >> t.txt
的作用是什么?假设t.txt只有一行文字“abc123”。我假设“abc123”的输出附加到t.txt。所以,我应该有两行“abc123”。然而,它只是进入无限循环。在我点击Control-C之前它不会停止。这是>>?
答案 0 :(得分:4)
cat
程序打开文件进行读取,读取文件并写入标准输出。
>>
是一个shell附加重定向。
您所看到的是以下周期:
cat
从t.txt
cat
将该行打印到文件t.txt
cat
测试它是否在文件末尾第4步将始终为假,因为在EOF检查发生时,已写入新行。 cat
等待因为写入总是先发生。
如果要阻止该行为,可以在两者之间添加缓冲区:
$ cat t.txt | cat >> t.txt
通过这种方式,在 cat t.txt
检查EOF后发生写入
答案 1 :(得分:2)
您要做的是:
cat t.txt >> t.txt
就像告诉您的系统逐行阅读t.txt
并将追加每行读到t.txt
。或者用更好的话说,“将文件附加到自身”。文件正在逐渐填满文件原始内容的重复 - 这是你无限循环背后的原因。
一般来说,尝试使用重定向远离读取和写入同一文件。是不是可以将其分解为两个步骤 - 1.从文件读取,输出到临时文件2.将临时文件附加到原始文件?
答案 2 :(得分:0)
cat
是类似于unix的系统中的命令,它连接多个输入文件并将其结果发送到标准输出。如果只指定了一个文件,则只输出该文件。 >>
部分将输出重定向到给定的文件名,在您的情况下为t.txt。
但是你所说的,用自己的内容覆盖t.txt。我不认为这种行为是定义的,所以我对你的无限循环并不感到惊讶!