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

如何使用SH脚本读取文本文件的目录列表生成单条go test命令

实现方法

方案1:使用mapfile读取(推荐,Bash 4.0+支持)

直接将文件每行读取到数组,天然支持带空格的目录名,不会出现参数拆分错误:

#!/bin/bash
# 读取.package-list所有行到数组,自动去除末尾换行符
mapfile -t PKG_LIST < .package-list
# 执行拼接后的单条测试命令
go test -coverprofile=coverage.out "${PKG_LIST[@]}"

"${PKG_LIST[@]}" 会将数组的每个元素作为独立参数传递给go test,符合命令参数的解析规则。

方案2:兼容低版本Bash的循环读取方案

如果运行环境的Bash版本低于4.0不支持mapfile,可以用while循环手动构建数组,还可以顺便加空行、注释行过滤逻辑:

#!/bin/bash
PKG_LIST=()
while IFS= read -r line || [ -n "$line" ]; do
  # 跳过空行和#开头的注释行,不需要可以删掉这行
  [[ -z "$line" || "$line" == \#* ]] && continue
  PKG_LIST+=("$line")
done < .package-list
go test -coverprofile=coverage.out "${PKG_LIST[@]}"

注意事项

不要用 cat .package-list | tr '\n' ' ' 这类字符串拼接的方式处理,遇到目录名带空格的场景会把一个目录拆成多个错误参数,导致命令执行失败。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 16:36:06