我不确定我是否完全理解 Unix 中的重定向。 我在玩这个命令 "cat hello.txt world.txt > world.txt "
我得到的输出对我来说很奇怪。我猜 world.txt 最初是空的,hello.txt 的内容将是 world.txt 的标准输出。
当我运行 "cat hello.txt world.txt > world.txt " 命令 后来查看world.txt的内容,看到hello.txt的内容被反复复制。 例如,如果 hello.txt 的内容为“Hello World!”,则 world.txt 将打印 “ Hello World !”很多次就像几百行。
发生这种情况的任何原因 谢谢
最佳答案
你对重定向的理解很好;这是您对 cat
的理解不足。 cat
的实现将 hello.txt
的内容写入 world.txt
(当 cat
时确实是空的) 由于重定向而开始),然后进入以下循环:
- 从
world.txt
中读取。 - 如果没有找到数据,退出
- 将数据写入
world.txt
, - 转到 1
POSIX 不需要这样的循环; cat
可以(我认为)先读取 world.txt
的全部内容,将其写到标准输出,然后退出而不检查 world.txt
已经长大了。但我怀疑出于性能原因,没有任何实现会真正做到这一点。
关于linux - 了解 Unix 中的 I/O 重定向,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49843263/