首页 > 解决方案 > macos ${{ env.TMPDIR }} 在 github 操作中不起作用

问题描述

我有一个 github 操作,它尝试使用 ${{ env.TMPDIR }} 并且似乎没有扩展到 TMPDIR 环境变量。

 - name: DEBUG Workaround GitHub-Actions-MacOS Issue with env.TMPDIR
    run: |
      echo "TMPDIR=$TMPDIR"
      echo "TMPDIR using ENV.TMPDIR=${{ env.TMPDIR }}"

这会产生:

TMPDIR=/var/folders/24/8k48jl6d249_n_qfxwsl6xvm0000gn/T/
TMPDIR using ENV.TMPDIR=

示例: 调试解决方法 GitHub-Actions-MacOS 与 env.TMPDIR 的问题

标签: macosgithub-actions

解决方案


TMPDIR是 bash 提供的一个shell环境变量。您使用 正确引用它$TMPDIR,这就是您在 bash 中引用环境变量的方式。它可能会解析为/tmp.

但是,您不能在 GitHub Actions 工作流程的一个步骤中设置 shell 环境变量,然后在另一个步骤中使用它。那是因为你会得到一个新的 shell 实例,它会有一个新的环境。这将不起作用:

- run: FOO="hello"
- run: echo $FOO

但是,您可以使用GitHub Actions 环境变量将信息保存在 GitHub Actions 环境中,而不是在 shell 环境中。这是两个不同的东西,没有隐含的混合。也就是说$TMPDIR不是${{env.TMPDIR}}。这是两种不同的环境。

如果要在步骤之间保留环境变量,则需要显式设置它,然后才能使用它。(您的工作流程没有设置TMPDIR任何地方。)

(我还鼓励您使用不同的名称,以避免与TMPDIR您的 shell 设置的环境变量混淆。)

您可以通过对在 shell 环境变量中提供给您的特定文件添加一对来设置 GitHub Actions 环境变量。echoname=value

换句话说:

- run: echo "FOO=hello" >> $GITHUB_ENV
- run: echo ${{ env.FOO }}

将保存 GitHub Actions 环境变量FOO的值hello。第二个运行步骤将打印它。

如果要创建、持久化和使用临时目录,则应使用该mktemp命令。例如,一步创建临时目录并将其路径设置为TEMP_DIR环境变量,下一步将文件写入临时目录,第三步打印临时目录名称,最后一步显示内容:

- run: echo "TEMP_DIR=$(mktemp -d)" >> $GITHUB_ENV
- run: echo "hi" >> ${{ env.TEMP_DIR}}/temp_file
- run: echo ${{env.TEMP_DIR}}
- run: ls -Flas ${{ env.TEMP_DIR }}

如果您真的想使用TMPDIR(而且我认为您不应该),那么您需要将其设置GitHub Actions 环境变量。

- run: echo $TMPDIR # works
- run: echo ${{ env.TMPDIR }} # does not work
- run: echo "TMPDIR=${TMPDIR}" >> $GITHUB_ENV # sets it into the GitHub Actions environment
- run: echo ${{ env.TMPDIR }} # works

推荐阅读