如何使用Github Actions生成校验和并设置环境变量?解决执行脚本时的重定向歧义错误
解决GitHub Actions中生成校验和并设置环境变量的问题
你遇到的ambiguous redirect错误,根源在于两点:一是你试图把命令输出重定向到一个还未定义的变量$CHECKSUM,shell不知道要把内容写到哪里;二是GitHub Actions里跨步骤传递环境变量有特定规则,不能直接用普通的shell变量赋值方式。
要正确实现生成校验和并让后续步骤能用到这个环境变量,得利用GitHub Actions提供的$GITHUB_ENV特殊文件——写入到这个文件的键值对会自动成为后续步骤可用的环境变量。
正确的Workflow配置
直接用一行命令就能搞定:
- name: Create checksum run: echo "CHECKSUM=$(shasum -a 1 foo.zip | awk '{ print $1 }')" >> $GITHUB_ENV
如果想让代码更清晰,也可以拆成多行:
- name: Create checksum run: | # 先计算校验和并存在临时变量里 CHECKSUM_VALUE=$(shasum -a 1 foo.zip | awk '{ print $1 }') # 写入到GITHUB_ENV,让后续步骤能访问 echo "CHECKSUM=$CHECKSUM_VALUE" >> $GITHUB_ENV
如何在后续步骤使用这个环境变量
配置完成后,后续的步骤可以直接通过$CHECKSUM(shell环境里)或者${{ env.CHECKSUM }}(GitHub Actions表达式)来引用这个值:
- name: Verify checksum run: | echo "Generated checksum: $CHECKSUM" # 或者用Actions表达式的方式 echo "Generated checksum via expression: ${{ env.CHECKSUM }}"
补充:如果只在当前步骤使用校验和
要是你不需要把校验和传递到其他步骤,只是在当前run里用,那直接定义普通shell变量就行,不用碰$GITHUB_ENV:
- name: Use checksum in same step run: | CHECKSUM=$(shasum -a 1 foo.zip | awk '{ print $1 }') echo "Current file checksum: $CHECKSUM" # 这里可以继续用$CHECKSUM做其他操作,比如校验文件一致性
内容的提问来源于stack exchange,提问作者mattrzr
相关产品推荐
相关产品推荐

