命令行“cat>>”行为

时间:2013-07-26 06:34:54

标签: linux macos unix cat

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

的预期行为

3 个答案:

答案 0 :(得分:4)

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

>>是一个shell附加重定向。

您所看到的是以下周期:

  1. catt.txt
  2. 读取一行
  3. cat将该行打印到文件
  4. 该行已附加到t.txt
  5. cat测试它是否在文件末尾
  6. 第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。我不认为这种行为是定义的,所以我对你的无限循环并不感到惊讶!