Unix shell cat a >> a 不起作用



我想在终端上复制两次文件的内容,
但我不会生成相同的文件,
所以我键入cat a >> a,此作业不会停止,
我终止了作业并打开文件a,发现文件a的内容有很多行
我知道cat a > b ; cat a >> b是有效的,
但我想知道为什么这个代码(cat a >> a)不起作用
如果有人知道我的问题,请告诉我会发生什么。

谢谢。

cat a >> a将不起作用,因为您已打开文件a进行读取和追加。您一直在读取一个添加了更多数据的文件,永远不会到达文件的末尾。

cat从文件的开头读取行时,这些行已经被>> a附加到文件的末尾。

cat到达文件的前一个末尾时,它不再是末尾。新的行已经被附加,并且cat继续读取这些行。这些行也将由>> a附加,然后由cat读取,再附加一次,再读取一次,依此类推,直到您中止进程或耗尽磁盘空间。

以下是实现您想要的目标的正确方法:

echo "$(cat a)" >>a

因为cat同时读取和写入(所以您可以cat非常大的文件),所以我们需要在将输出附加到"a"文件之前捕获它。。。

最新更新