我想在终端上复制两次文件的内容,
但我不会生成相同的文件,
所以我键入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"文件之前捕获它。。。