GitHub Actions中脚本输出重定向至GITHUB_OUTPUT失败排查
GitHub Actions重定向输出到环境变量失败的问题解决
问题描述
我有一个可生成执行矩阵的bash脚本,想在GitHub Actions任务中使用。脚本本身执行正常,但将输出重定向到$GITHUB_OUTPUT时步骤失败,报错如下:
Run echo "tst=$(${PWD}/dev/i18n-scripts/generate-matrix.sh)\n" >> $GITHUB_GITHUB_OUTPUT /__w/_temp/ce44932f-d406-437e-b87d-842822d14b51.sh: 1: cannot create : Directory nonexistent Error: Process completed with exit code 2.
对应的GitHub Actions步骤配置:
steps: - name: checkout uses: actions/checkout@v3 - name: make-it-executable run: chmod +x ${PWD}/dev/i18n-scripts/generate-matrix.sh - name: set-matrix run: echo "tst=$(${PWD}/dev/i18n-scripts/generate-matrix.sh)\n" >> $GITHUB_GITHUB_OUTPUT
移除>> $GITHUB_GITHUB_OUTPUT后脚本能正常执行,但无法传递输出到后续步骤,问题出在哪里?
问题原因
核心是环境变量名称拼写错误:GitHub Actions中用于传递步骤输出的环境变量是GITHUB_OUTPUT,而你写的是GITHUB_GITHUB_OUTPUT。当bash解析这个错误的变量名时,因为变量不存在会被展开为空字符串,导致命令变成echo "tst=..." >> ——相当于要重定向到一个空路径,自然会抛出“目录不存在”的错误。
解决方案
1. 修正环境变量名称
把步骤里的$GITHUB_GITHUB_OUTPUT改成$GITHUB_OUTPUT即可,修正后的步骤:
- name: set-matrix run: echo "tst=$(${PWD}/dev/i18n-scripts/generate-matrix.sh)" >> $GITHUB_OUTPUT
额外注意事项
- bash默认不会解析
echo里的\n,如果需要换行得加-e参数,不过GitHub Actions的GITHUB_OUTPUT不需要额外换行,每个变量占一行即可,直接去掉\n更稳妥。 - 如果你的矩阵输出包含空格、引号或其他特殊字符,建议用Here-doc方式避免转义问题:
- name: set-matrix run: | echo "tst<<EOF" >> $GITHUB_OUTPUT ${PWD}/dev/i18n-scripts/generate-matrix.sh >> $GITHUB_OUTPUT echo "EOF" >> $GITHUB_OUTPUT
内容的提问来源于stack exchange,提问作者Bertuz
相关产品推荐
相关产品推荐

