这个命令有什么作用cat t.txt >> t.txt
?假设 t.txt 只有一行文本“abc123”。我假设“abc123”的输出附加到 t.txt。所以,我应该有两行“abc123”。然而,它只是进入一个无限循环。在我按下 Control-C 之前它不会停止。这是 >> 的预期行为吗?
3 回答
cat
程序打开文件进行读取,读取文件并写入标准输出。
>>
是一个外壳附加重定向。
您看到的是以下循环:
cat
读取一行t.txt
cat
将行打印到文件- 该行附加到
t.txt
cat
测试它是否在文件末尾
第 4 步总是错误的,因为在 EOF 检查发生时已经写入了新行。 cat
等待,因为写入总是先发生。
如果你想防止这种行为,你可以在两者之间添加一个缓冲区:
$ cat t.txt | cat >> t.txt
这样,写入发生在 cat t.txt
检查 EOF之后
你想做什么:
cat t.txt >> t.txt
就像告诉您的系统逐行读取t.txt
并将每一行附加到t.txt
. 或者更确切地说,“将文件附加到自身”。该文件正逐渐被文件原始内容的重复填满——这就是无限循环背后的原因。
一般来说,尽量避免使用重定向读取和写入同一个文件。是否不可能将其分解为两个步骤 - 1. 从文件读取,输出到临时文件 2. 将临时文件附加到原始文件?
cat
is a command in unix-like systems that concatenates multiple input files and sends their result to the standard output. If only one file is specified, it just outputs that one file. The >>
part redirects the output to the given file name, in your case t.txt.
But what you have says, overwrite t.txt with the contents of itself. I don't think this behavior is defined, and so I'm not surprised that you have an infinite loop!