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

Shell脚本问题:父脚本循环调用a.sh仅执行一次问题咨询

问题原因与修复方案

问题根因

  • 通配符被双引号包裹导致未展开:你在for循环的遍历范围里把../hostchng/*写在了双引号内,Shell不会对双引号内部的*通配符做展开,最终整个循环只会拿到../hostchng/*这一个字符串值,因此循环仅执行1次。
  • 若你使用source执行a.sh的场景下,a.sh如果存在exit语句,也会直接终止父脚本run.sh的运行,导致循环只执行一次。

修复后的代码

修改后run.sh内容

#!/bin/bash
echo "$$"
# 去掉通配符外的双引号,让Shell正常展开匹配到的所有文件
for fname in ../hostchng/*
do
  echo "$fname"
  # 如果不需要复用a.sh里的变量、函数,建议直接执行而非source,避免父子脚本互相影响
  bash ./a.sh "$fname"
done

a.sh内容(可保留不变,建议加上执行权限)

给a.sh加执行权限的命令:chmod +x a.sh

echo "test $1  $$"

补充说明

遍历文件名时建议给变量加上双引号,比如"$fname",避免文件名包含空格、特殊字符时执行出错。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 10:06:01