You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

GitHub复合动作如何输出多行文本至订阅工作流?

解决GitHub复合动作多行文本输出问题

问题根源

直接通过echo "KEY=VALUE"写入GITHUB_OUTPUT或GITHUB_ENV时,多行文本里的换行、特殊字符会破坏GitHub的变量解析格式,导致报错;用EOF时未加双引号输出变量,会丢失换行;Base64编码时未禁用自动换行,导致编码内容被拆分,触发格式错误。

方案1:EOF语法保留完整换行

修改EOF写法,确保输出变量时用双引号包裹,保留所有换行和特殊字符:

FOLDER=$(ls -d */ | grep -E '^my-dynamically-named-artifact-folder-*')
FILE_PATH="${FOLDER}file.txt"
echo "FILE_PATH=$FILE_PATH" >> "$GITHUB_ENV"

# 读取文件内容
if [ -f "$FILE_PATH" ]; then
  FILE_TEXT=$(cat "$FILE_PATH")
else
  FILE_TEXT="report.txt does not exist"
fi

# 正确写入GITHUB_OUTPUT
echo 'FILE_TEXT<<EOF' >> "$GITHUB_OUTPUT"
echo "$FILE_TEXT" >> "$GITHUB_OUTPUT"
echo 'EOF' >> "$GITHUB_OUTPUT"

# 写入GITHUB_ENV同理
echo 'FILE_TEXT<<EOF' >> "$GITHUB_ENV"
echo "$FILE_TEXT" >> "$GITHUB_ENV"
echo 'EOF' >> "$GITHUB_ENV"
  • 关键:echo "$FILE_TEXT"必须用双引号包裹,否则Shell会把换行替换成空格,导致文本变成单行。
  • 订阅工作流中直接引用输出即可:${{ steps.your-action-step-id.outputs.FILE_TEXT }},GitHub会自动保留换行格式。

方案2:Base64编码避免格式冲突

如果文本包含大量特殊字符(比如引号、反斜杠),Base64编码是更稳妥的方式,注意禁用编码后的自动换行:

FOLDER=$(ls -d */ | grep -E '^my-dynamically-named-artifact-folder-*')
FILE_PATH="${FOLDER}file.txt"

# 读取并编码文件内容,-w 0禁用自动换行
if [ -f "$FILE_PATH" ]; then
  B64=$(cat "$FILE_PATH" | base64 -w 0)
else
  B64=$(echo "report.txt does not exist" | base64 -w 0)
fi

echo "B64=$B64" >> "$GITHUB_OUTPUT"

订阅工作流中解码还原:

# 解码并获取原始文本
ORIGINAL_TEXT=$(echo "${{ steps.your-action-step-id.outputs.B64 }}" | base64 -d)

# 写入Issue示例
gh issue create --title "生成报告" --body "$ORIGINAL_TEXT"

注意事项

  • 避免直接用echo "KEY=$VALUE"写入多行文本,除非你能确保文本没有换行和特殊字符。
  • 操作GITHUB_OUTPUT和GITHUB_ENV文件时,始终用双引号包裹路径(比如"$GITHUB_OUTPUT"),防止路径含特殊字符时出错。
  • 用cat读取文件比$(<file)更稳妥,兼容性更好。

内容的提问来源于stack exchange,提问作者Mixchange

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.22 16:38:17