如何用Bash脚本并行执行Google Apps Script clasp命令并优化执行逻辑
解决方案
修改后的完整脚本
#!/bin/bash # 可根据需求替换为其他clasp命令,比如clasp push、clasp deploy CLASP_CMD="clasp pull" # 适配Node版本避免clasp报错 [ -s "/usr/local/opt/nvm/nvm.sh" ] && . "/usr/local/opt/nvm/nvm.sh" nvm install 14.17.5 nvm use 14.17.5 # 存储后台进程PID的数组 pids=() find . -name '.clasp.json' | while read -r file; do ( project_dir=$(dirname "$file") project_name=$(basename "$project_dir") cd "$project_dir" || exit 1 # 屏蔽clasp的所有原生输出,包括stdout和stderr $CLASP_CMD >/dev/null 2>&1 # 根据退出码输出结果,0为成功,非0为失败 if [ $? -eq 0 ]; then echo "✅ 成功:$project_name" else echo "❌ 失败:$project_name" fi ) & # 记录后台进程PID pids+=("$!") done # 等待所有后台进程执行完成,主进程才会退出 wait "${pids[@]}" echo "所有任务执行完毕"
实现说明
- 解决提前返回shell提示符问题:主进程末尾添加了
wait命令,会等待所有启动的clasp后台子进程全部执行完毕后才退出,不会提前结束 - 区分每个项目的成功/失败状态:每个子进程独立执行命令后通过退出码判断结果,输出时直接标注对应项目目录名,不会出现输出和项目不匹配的问题
- 屏蔽clasp原生输出:通过
>/dev/null 2>&1将clasp命令的标准输出和错误输出全部丢弃,仅保留自定义的成功/失败提示 - 支持任意clasp命令:仅需要修改脚本开头的
CLASP_CMD变量值即可切换为clasp push、clasp deploy等其他命令,无需修改逻辑部分
内容的提问来源于stack exchange,提问作者Employee
相关产品推荐
相关产品推荐

