微信群机器人-备份文件发送通知
微信群机器人-备份文件发送通知
#!/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🏁 所有操作已完成”