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

bash中sort命令输出正常但重定向写入原文件不生效问题

问题根因

这个问题是shell重定向的执行机制导致的,和sort的排序逻辑没有关系:

  • shell解析整条命令时,> 输出重定向的执行优先级高于命令本身,会在sort进程启动前就完成操作:shell会直接打开重定向的目标文件,立刻清空文件全部内容,预留好对应的文件描述符,等后续命令启动后往里面写输出。
  • 等重定向的准备工作做完,sort才会正式启动运行,这时候它要读取的原文件已经被清空了,根本读不到有效数据,自然没法输出正确的排序结果。
  • 你看到文件内容和排序前完全没有变化,大概率是操作时文件名写错了——你最开始提到的待处理文件是tmp-source-g5.txt,但执行的命令里读写的都是source-g5.txt,原文件根本没被涉及当然不会变。如果命令里读写的是完全相同的文件名,正常执行完你会得到一个空文件。
正确操作方法

要实现排序后写回原文件的需求,选下面任意一种方式都可以:

  • 通用稳妥方案(所有文件处理类命令都能用):先把结果写到临时文件,确认排序结果没问题后,再用临时文件替换原文件
sort -k1 -n source-g5.txt > sorted_tmp.txt
mv sorted_tmp.txt source-g5.txt
  • sort专属简便写法:用sort自带的-o参数指定输出文件。这个参数的逻辑是让sort先把所有输入内容完整读入内存、完成全量排序之后,才会打开-o指定的输出文件写入内容,不会出现提前截断原文件的问题
sort -k1 -n -o source-g5.txt source-g5.txt

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 08:51:32