如何在GitHub Action中通用引用GitHub Pages URL及实现sed变量?
GitHub Action获取Pages URL及sed变量使用方案
一、获取GitHub Pages完整URL(支持自定义域名)
GitHub默认环境变量没有直接提供Pages的访问地址,可通过GitHub REST API获取仓库的Pages配置,步骤如下:
- 添加步骤调用API提取URL:
这个方法会自动获取实际生效的Pages地址,不管是默认的- name: Fetch GitHub Pages URL id: retrieve_pages_url run: | # 调用API获取Pages地址,用jq提取html_url字段 PAGES_URL=$(gh api repos/${{ github.repository }}/pages --jq '.html_url') # 移除URL末尾的斜杠,避免拼接时出现重复斜杠 PAGES_URL=$(echo "$PAGES_URL" | sed 's/\/$//') # 将结果存入Action输出变量,供后续步骤调用 echo "pages_url=$PAGES_URL" >> $GITHUB_OUTPUT env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}username.github.io/repo还是自定义域名。
二、sed命令中使用变量的实用技巧
bash中,单引号包裹的内容不会解析变量,双引号会解析变量,针对sed命令的变量使用,推荐以下几种方式:
1. 提前构造插入字符串(可读性最优)
先把要插入的完整内容定义成变量,再传给sed:
# 构造跳转标签字符串 REDIRECT_TAG=" <meta http-equiv=\"refresh\" content=\"0;URL=${REDIRECT_URL}\">" # 插入到第19行 sed -i "19i\\${REDIRECT_TAG}" _site/index.html
这种方式逻辑清晰,不容易出错,适合复杂字符串场景。
2. 混合单双引号拼接
将固定内容用单引号,变量部分用双引号,直接拼接:
sed -i '19i\ <meta http-equiv="refresh" content="0;URL='"${REDIRECT_URL}"'">' _site/index.html
注意变量前后的引号衔接:单引号闭合后接双引号包裹的变量,再继续单引号包裹剩余内容。
3. 全程双引号(需转义特殊字符)
如果用双引号包裹整个sed命令,要转义其中的"和\:
sed -i "19i\\ <meta http-equiv=\"refresh\" content=\"0;URL=${REDIRECT_URL}\">" _site/index.html
这种方式需要处理转义,可读性稍差,适合简单场景。
完整Action示例
整合上述步骤,完整的跳转生成流程如下:
- name: Fetch GitHub Pages URL id: retrieve_pages_url run: | PAGES_URL=$(gh api repos/${{ github.repository }}/pages --jq '.html_url') PAGES_URL=$(echo "$PAGES_URL" | sed 's/\/$//') echo "pages_url=$PAGES_URL" >> $GITHUB_OUTPUT env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - name: Generate index page redirect run: | REDIRECT_URL="${{ steps.retrieve_pages_url.outputs.pages_url }}/manual/" REDIRECT_TAG=" <meta http-equiv=\"refresh\" content=\"0;URL=${REDIRECT_URL}\">" sed -i "19i\\${REDIRECT_TAG}" _site/index.html
内容的提问来源于stack exchange,提问作者CaseyHofland
相关产品推荐
相关产品推荐

