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

如何用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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 04:06:03