0

这个命令有什么作用cat t.txt >> t.txt?假设 t.txt 只有一行文本“abc123”。我假设“abc123”的输出附加到 t.txt。所以,我应该有两行“abc123”。然而,它只是进入一个无限循环。在我按下 Control-C 之前它不会停止。这是 >> 的预期行为吗?

4

3 回答 3

4

cat程序打开文件进行读取,读取文件并写入标准输出。

>>是一个外壳附加重定向。

您看到的是以下循环:

  1. cat读取一行t.txt
  2. cat将行打印到文件
  3. 该行附加到t.txt
  4. cat测试它是否在文件末尾

第 4 步总是错误的,因为在 EOF 检查发生时已经写入了新行。 cat等待,因为写入总是先发生。

如果你想防止这种行为,你可以在两者之间添加一个缓冲区:

$ cat t.txt | cat >> t.txt

这样,写入发生 cat t.txt检查 EOF之后

于 2013-07-26T07:00:28.647 回答
2

你想做什么:

cat t.txt >> t.txt

就像告诉您的系统逐行读取t.txt并将每一行附加到t.txt. 或者更确切地说,“将文件附加到自身”。该文件正逐渐被文件原始内容的重复填满——这就是无限循环背后的原因。

一般来说,尽量避免使用重定向读取和写入同一个文件。是否不可能将其分解为两个步骤 - 1. 从文件读取,输出到临时文件 2. 将临时文件附加到原始文件?

于 2013-07-26T06:53:11.850 回答
0

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!

于 2013-07-26T06:40:32.400 回答