Rab*_*bit 6 io-redirection input files cat output
具体地,在的情况下cat x y > y和cat x >> x其中x和y是文件。
如果我没有收到“输入文件是输出文件”错误会怎样?基本上,为什么我不允许运行这些命令?
cat x y > y将与cp x y(因为y在cat开始时间之前会被截断)相同,然后是cat y >> y.
cat x >> x 将是一个无限循环,直到您的磁盘已满或您达到文件系统的文件大小限制(因为它不断添加到文件的末尾,然后重新读入以再次添加)。
请注意,这个“错误”并不意味着cat没有做任何事情——它只是一个通知,这个特定文件被跳过了(至少在 GNUcat中)。你被“允许”运行它,它可能没有做你想要的,它让你知道。
在 GNUcat中生成该消息的测试是:
st_dev字段)和索引节点(st_ino字段)是相同的;和如果所有这些都适用,它会打印诊断信息并移至下一个输入文件。
某些版本的cat命令不进行此检查,您可以使这些事情发生。我可以想象一个系统,他们确实进行了检查,但它无法判断它们也是同一个文件,尽管我无法直接告诉你一个。在任何一种情况下,它都可能以糟糕的方式结束。如果cat实现只对整个内存映射文件进行一次写入,那么到目前为止,您可能只是将文件翻倍,而不是循环,但这只是一种不太严重的情况。