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
实现只对整个内存映射文件进行一次写入,那么到目前为止,您可能只是将文件翻倍,而不是循环,但这只是一种不太严重的情况。