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

Bash中用循环替代进程替换未达预期的原因咨询

问题原因分析

先还原你大概率用到的两种循环写法:

失效的for循环写法(推测):

for col in 1 2; do
  tee >(cut -f$col | sort -u > words$col.txt) < users.txt
done

正常工作的for循环写法:

for col in 1 2; do
  cat users.txt | cut -f$col | sort -u > words$col.txt
done

失效核心原因

问题出在文件输入的读取逻辑上:

  • 用< users.txt直接给tee当输入时,第一次循环会把users.txt的内容一次性读完,文件内部的读取指针会直接跳到文件末尾。
  • 第二次循环执行时,再次打开同一个文件,默认会从上次停留的指针位置(文件末尾)开始读取,自然读不到任何内容,所以后续生成的文件只有空白或仅残留极少量数据。

而用cat users.txt | ...的写法时,每次循环都会重新运行cat命令,cat会重新打开并完整读取users.txt的内容,所以每一次循环都能拿到全量数据,处理结果自然正常。

修复建议

如果想保留tee的写法,只要确保每次循环都重新读取完整文件即可,比如改成:

for col in 1 2; do
  cat users.txt | tee >(cut -f$col | sort -u > words$col.txt) > /dev/null
done

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 22:20:47