macos ${{ env.TMPDIR }} 在 github 操作中不起作用

lew*_*wis 5 macos github-actions

我有一个 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 }}"
Run Code Online (Sandbox Code Playgroud)

这会产生:

TMPDIR=/var/folders/24/8k48jl6d249_n_qfxwsl6xvm0000gn/T/
TMPDIR using ENV.TMPDIR=
Run Code Online (Sandbox Code Playgroud)

示例: 使用 env.TMPDIR 调试解决方案 GitHub-Actions-MacOS 问题

Edw*_*son 7

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

但是,您无法在 GitHub Actions 工作流程的一个步骤中设置 shell 环境变量,然后在另一步骤中使用它。这是因为您将获得 shell 的新实例,并且它将具有新的环境。这是行不通的:

- run: FOO="hello"
- run: echo $FOO
Run Code Online (Sandbox Code Playgroud)

但是,您可以使用GitHub Actions 环境变量将信息保留在 GitHub Actions 环境中,而不是 shell 环境中。这是两个不同的事情,并且不存在隐式混合。也就是说$TMPDIR不是${{env.TMPDIR}}。这是两个不同的环境。

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

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

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

换句话说:

- run: echo "FOO=hello" >> $GITHUB_ENV
- run: echo ${{ env.FOO }}
Run Code Online (Sandbox Code Playgroud)

将保留 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 }}
Run Code Online (Sandbox Code Playgroud)

如果您确实想使用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
Run Code Online (Sandbox Code Playgroud)