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

如何用Bash合并两个STDOUT流单步读取并格式化归档日志

解决方案

你无法捕获第二个输出流和你使用mdos的ls参数无关,问题出在原本的脚本里把get命令的输出重定向到了loadstart文件,同时单独打印了文件名,才导致两个输出交错。
你不需要使用关联数组,单循环逐个处理的方案更简单高效,是当前场景的最优解,无需额外存储所有文件的信息,处理一条输出一条即可。

优化后脚本

# 直接读取mdos ls输出的文件名逐行处理,无需生成临时文件列表
while read -r name; do
    # 捕获当前文件对应的加载/启动地址输出,无对应信息时变量为空
    load_info=$(C:/TEST/mdos.exe floppy.img get "$name" C:/TEST/MDOS/"$name")
    # 格式化输出,文件名左对齐占10字符宽度,可根据实际最长文件名调整数值
    printf "%-10s%s\n" "$name" "$load_info"
done < <(C:/TEST/mdos.exe floppy.img ls -1)

补充说明

  • 如果需要同时将日志保存到文件,可在done末尾添加重定向,比如要同时输出到屏幕和recovery.log,修改最后一行为done < <(C:/TEST/mdos.exe floppy.img ls -1) | tee recovery.log即可。
  • %-10s中的10是预留的文件名宽度,如果你的文件名最长超过10个字符,调整为对应的数值即可保证对齐效果。
  • 该方案避免了生成filelist、loadstart等临时文件,逻辑更简洁,也不会产生额外的磁盘IO开销。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 12:39:02