macos - 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=
解决方案
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 环境变量。echo
name=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
推荐阅读
- javascript - Cloud Functions 返回未定义的、预期的 Promise 或值
- regex - 使用正则表达式或美丽的汤从 instagram 中获取某人的网站
- charts - Creating multi line graphs using Google Charts API
- python - 尝试加入3张图片
- android - Failed to resolve: com.google.android.material:material:1.0.0-alpha1
- php - 在滑块 Codeigniter 中显示图像
- linux - Bash 检查用户是否存在,如果存在,将数字添加到用户名
- android - conflict between fragments inside a viewpager
- python - 为python字典中的所有键添加新键
- sql - 如何使 postgres 快速搜索