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

Linux循环执行脚本问题排查:如何输出文件名与脚本执行结果?

解决循环调用脚本并捕获输出的问题

我来帮你搞定这个问题!你遇到的核心问题确实出在cov='script.sh $name'这一行,咱们一步步拆解问题所在,再给出修复方案:

问题分析

  1. 单引号的变量展开问题:bash里单引号会把所有内容当成纯字符串,$name不会被替换成实际读取到的文件名,只会原样保留成字符串"$name",导致script.sh接收到的参数不是你想要的文件名。
  2. 没有执行脚本捕获输出:你现在只是把命令文本赋值给了cov变量,并没有真正运行script.sh并把它的输出存到变量里。要捕获命令的执行结果,得用bash的命令替换语法。

修复后的命令

把赋值行改成用$()(推荐的命令替换写法,比反引号更易读和嵌套),同时用双引号包裹$name处理带空格的文件名:

cat name.txt | while read name ; do
    cov=$(script.sh "$name")
    echo "$name $cov"
done

更优化的写法(避免无用的cat)

我们可以直接让while read读取文件,省去管道和cat进程,更高效:

while read -r name ; do
    cov=$(script.sh "$name")
    echo "$name $cov"
done < name.txt

这里的-r选项是为了防止read命令把文件名里的反斜杠当成转义字符,处理特殊文件名更安全。

额外提示

如果script.sh的输出包含换行、空格或者特殊字符,建议给echo的内容加上双引号,避免bash自动拆分字段:

echo "$name: $cov"

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 07:58:50