微信群机器人-备份文件发送通知
#!/bin/bash
# 配置文件路径(与企业微信配置分离)
CONFIG_FILE="$(dirname "$0")/git_pull_config.env"
# 加载配置文件
if [ -f "$CONFIG_FILE" ]; then
source "$CONFIG_FILE"
else
WX_ROBOT_URL="https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=xxxx" # 默认不发送通知
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<pre>${exec_output}</pre>")
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🏁 所有操作已完成"