You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Unix中I/O重定向疑问:cat命令重定向异常问题

为什么cat hello.txt world.txt > world.txt会得到重复内容?

哈哈,这个问题我刚接触Unix命令行的时候也踩过同款坑!咱们来拆解一下到底发生了什么:

核心原因:Shell先处理重定向,再执行命令

Unix shell的执行逻辑是先解析并处理所有重定向操作,再运行命令本身,这就是问题的根源:

  • 当你输入cat hello.txt world.txt > world.txt时,shell第一步就会处理> world.txt:它会打开world.txt(如果不存在就创建),并且立刻清空文件里的所有内容。
  • 等shell处理完重定向,才会启动cat命令。这时候cat要依次读取两个输入文件:hello.txt和world.txt。
    1. cat先读取hello.txt的内容,把它写入到已经被清空的world.txt里;
    2. 接着cat去读取world.txt,但这时候world.txt已经有了刚写入的hello.txt内容,于是cat会把这部分内容再读一遍,又写入到world.txt里。
  • 最终world.txt里就会有两份hello.txt的内容,也就是你看到的重复情况。

正确的做法

根据你的需求,分几种情况处理:

  • 如果只是想把hello.txt的内容覆盖到world.txt,直接用:
    cat hello.txt > world.txt
    
  • 如果想把hello.txt的内容追加到world.txt末尾,用追加重定向>>:
    cat hello.txt >> world.txt
    
  • 如果确实需要合并多个文件(包括world.txt本身)到world.txt里,为了避免上述问题,可以先把内容写到临时文件,再替换目标文件:
    cat hello.txt world.txt > temp.txt && mv temp.txt world.txt
    

内容的提问来源于stack exchange,提问作者Samun

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 03:56:43