我不确定我是否完全理解Unix中的重定向。 我正在玩这个命令“cat hello.txt world.txt> world.txt”
我得到的输出对我来说很奇怪。我猜测world.txt最初是空的,hello.txt的内容将是stdout到world.txt。
当我运行“cat hello.txt world.txt> world.txt”时 命令 然后检查world.txt中的内容,我看到hello.txt的内容被反复复制。 例如,如果hello.txt的内容为“Hello World!”,那么将打印world.txt “你好,世界 !”很多次就像数百行。
出现这种情况的原因 谢谢
答案 0 :(得分:2)
您对重定向的理解很好;这是你对cat
所缺乏的理解。您的cat
实现会将hello.txt
的内容写入world.txt
(由于重定向,cat
启动时确实为空),然后去进入以下循环:
world.txt
读取。world.txt
, POSIX不需要这样的循环; cat
可以(我认为)首先阅读world.txt
的全部内容,将其写入标准输出,然后退出而不检查world.txt
是否已增长。但出于性能原因,我怀疑没有任何实现可以实际执行此操作。
答案 1 :(得分:1)
首先,cat
将打开hello.txt
,并且由于重定向,effectivley将其内容复制到world.txt
。然而,接下来会发生什么,cat
将打开world.txt
,现在是hello.txt
的副本。当cat
从world.txt
读取数据时,它会将其输出重定向到指定的文件(即world.txt
),这意味着总是要读取更多(假设无限磁盘)。 / p>