linux - 了解 Unix 中的 I/O 重定向

标签 linux shell unix io-redirection

我不确定我是否完全理解 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 时确实是空的) 由于重定向而开始),然后进入以下循环:

  1. world.txt 中读取。
  2. 如果没有找到数据,退出
  3. 将数据写入world.txt,
  4. 转到 1

POSIX 不需要这样的循环; cat 可以(我认为)先读取 world.txt 的全部内容,将其写到标准输出,然后退出而不检查 world.txt 已经长大了。但我怀疑出于性能原因,没有任何实现会真正做到这一点。

关于linux - 了解 Unix 中的 I/O 重定向,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49843263/

相关文章:

linux - 如何在 Linux 中自动化 ssh-keygen -t rsa?

windows - 阻止在匿名管道上读写

c# - 有什么方法可以通过终端运行 C#?

linux - 什么是./在终端上执行期间

python - 如何编写 python 脚本以在 linux mint 中打开应用程序

c - 帮助在 C 中实现 GNU Readline

linux - 适用于 Mac OS X 或 Linux 的 Java Micro Edition (JME) SDK

c - 为什么这个阻塞套接字读取返回零并且没有错误?

python - 使用 Python 禁止屏保

python - 简单 python 模块出错