目录

微信群机器人-备份文件发送通知

目录

微信群机器人-备份文件发送通知

#!/bin/bash

配置文件路径(与企业微信配置分离)

CONFIG_FILE="$(dirname “$0”)/git_pull_config.env"

加载配置文件

if [ -f “$CONFIG_FILE” ]; then
    source “$CONFIG_FILE”
else
    WX_ROBOT_URL=“  # 默认不发送通知
fi

获取脚本所在目录的绝对路径

repos_path="$(cd “$(dirname “$0”)” && pwd)”

初始化统计变量(避免子 Shell 作用域问题)

declare -i total_repos=0 success_count=0 error_count=0
declare -a error_messages=()

关键修复:使用进程替换避免子 Shell 变量丢失

while IFS= read -r gitdir; do
    ((total_repos++))
    project_dir=$(dirname “$gitdir”)
    echo -e “\n[ START ] 同步仓库: $project_dir”

    # 执行 git pull 并捕获输出
    exec_output=$(cd “$project_dir” && git pull 2>&1)
    exec_status=$?

    # 记录执行结果
    if [ $exec_status -eq 0 ]; then
        ((success_count++))
    else
        ((error_count++))
        error_messages+=("【失败】$project_dir\n

${exec_output}
")
    fi
done < <(find “$repos_path” -type d -name .git)  # 使用进程替换

构建企业微信通知内容

build_notification() {
    local status_icon="✅"
    [ $error_count -gt 0 ] && status_icon="⚠️"

    cat «EOF
Git 同步完成通知 ${status_icon}

同步时间: $(date “+%Y-%m-%d %H:%M:%S”)
扫描目录: `${repos_path}`
仓库总数: ${total_repos}
成功数量: ${success_count}
失败数量: ${error_count}
EOF

    [ $error_count -gt 0 ] && echo -e “\n失败详情:\n${error_messages[@]//$’\n’/\n}”
}

发送企业微信通知(支持 Markdown)

send_wx_notification() {
    local content=$(build_notification | jq -Rs .)
    local json_payload=$(cat «EOF
{
    “msgtype”: “markdown”,
    “markdown”: {
        “content”: ${content}
    }
}
EOF
)

    curl -sSL \
        -H “Content-Type: application/json” \
        -d “${json_payload}” \
        “${WX_ROBOT_URL}” | jq -r ‘.errmsg // “未知错误”’
}

执行通知(当配置有效时)

if [[ -n “$WX_ROBOT_URL” && “$WX_ROBOT_URL” == qyapi.weixin.qq.com ]]; then
    echo -e “\n🔄 正在发送企业微信通知…”
    result=$(send_wx_notification)
    [ “$result” == “ok” ] && echo “✅ 通知发送成功” || echo “❌ 通知发送失败: $result”
else
    echo -e “\n⚠️ 未配置有效企业微信机器人,跳过通知”
fi

echo -e “\n🏁 所有操作已完成”