如何在GitHub API的JSON POST请求中嵌入bash date命令?
解决GitHub API夜间发布嵌入日期的问题
我来帮你搞定这个需求!在bash脚本里把date命令的输出嵌入到GitHub API的JSON POST请求中,核心是要让shell正确解析命令替换,同时保证JSON格式合法。下面给你几种实用的方法:
方法1:直接在双引号JSON中嵌入命令替换
bash中双引号包裹的字符串会解析内部的命令替换($()),所以你可以直接把$(date +%d-%m-%Y)写在JSON里,注意要转义JSON本身的双引号(用\"),避免和外层的双引号冲突:
curl -X POST \ -H "Authorization: token YOUR_GITHUB_TOKEN" \ -H "Content-Type: application/json" \ https://api.github.com/repos/OWNER/REPO/releases \ -d "{ \"tag_name\": \"nightly-$(date +%d-%m-%Y)\", \"name\": \"Nightly Build $(date +%d-%m-%Y)\", \"body\": \"Automated nightly release for $(date +%d-%m-%Y)\", \"draft\": false, \"prerelease\": true }"
方法2:用变量存储日期后再代入
先把日期存到一个变量里,再在JSON中引用变量,这样代码更清晰,也减少重复执行date命令的开销:
# 先获取日期并存入变量 RELEASE_DATE=$(date +%d-%m-%Y) # 发送POST请求 curl -X POST \ -H "Authorization: token YOUR_GITHUB_TOKEN" \ -H "Content-Type: application/json" \ https://api.github.com/repos/OWNER/REPO/releases \ -d "{ \"tag_name\": \"nightly-$RELEASE_DATE\", \"name\": \"Nightly Build $RELEASE_DATE\", \"body\": \"Automated nightly release for $RELEASE_DATE\", \"draft\": false, \"prerelease\": true }"
方法3:用jq生成JSON(推荐)
如果JSON结构比较复杂,手动转义双引号容易出错,推荐用jq工具来生成合法的JSON。它会自动处理引号转义,还能方便地传递变量:
RELEASE_DATE=$(date +%d-%m-%Y) curl -X POST \ -H "Authorization: token YOUR_GITHUB_TOKEN" \ -H "Content-Type: application/json" \ https://api.github.com/repos/OWNER/REPO/releases \ -d "$(jq -n --arg date "$RELEASE_DATE" '{ tag_name: "nightly-\($date)", name: "Nightly Build \($date)", body: "Automated nightly release for \($date)", draft: false, prerelease: true }')"
注意事项
- 记得替换命令中的
YOUR_GITHUB_TOKEN(需要有私有仓库的repo权限)、OWNER(仓库所有者用户名/组织名)、REPO(仓库名称)。 - 如果你的夜间发布需要更多自定义参数(比如上传资产),可以根据GitHub API的规则扩展JSON内容。
内容的提问来源于stack exchange,提问作者user3577138
相关产品推荐
相关产品推荐

