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

macos${{env.TMPDIR}}在github操作中不工作,macos,github-actions,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 }}" 这将产生: TMPDIR=/

我有一个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操作工作流的一个步骤中设置shell环境变量,然后在另一个步骤中使用它。这是因为您将获得一个新的shell实例,它将拥有一个新的环境。这是行不通的:

-run:FOO=“你好”
-运行:echo$FOO
但是,您可以使用在GitHub操作环境中而不是在shell环境中持久化信息。这是两种不同的东西,没有隐含的混合。也就是说,
$TMPDIR
不是
${{env.TMPDIR}
。这是两种不同的环境

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

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

您可以通过
echo
name=value
配对到shell环境变量中提供给您的特定文件

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

-run:echo“FOO=hello”>$GITHUB\u ENV
-运行:echo${{env.FOO}
将使用值
hello
持久化GitHub操作环境变量
FOO
。第二个运行步骤将打印它

如果要创建、保存和使用临时目录,应使用
mktemp
命令。例如,要在一个步骤中创建临时目录并将其路径设置为环境变量
temp\u DIR
,请在下一步中将文件写入临时目录,在第三步中打印临时目录名称,并在最后一步中显示内容:

-run:echo“TEMP\u DIR=$(mktemp-d)”>>$GITHUB\u ENV
-运行:echo“hi”>${env.TEMP\u DIR}}/TEMP\u文件
-运行:echo${{env.TEMP_DIR}
-运行:ls-Flas${{env.TEMP_DIR}
如果您真的想使用
TMPDIR
(同样,我认为您不应该这样做),那么您需要将其设置为GitHub Actions环境变量

 - name: DEBUG Workaround GitHub-Actions-MacOS Issue with env.TMPDIR
    run: |
      echo "TMPDIR=$TMPDIR"
      echo "TMPDIR using ENV.TMPDIR=${{ env.TMPDIR }}"
-run:echo$TMPDIR#works
-运行:echo${{env.TMPDIR}}不工作
-运行:echo“TMPDIR=${TMPDIR}”>$GITHUB_ENV#将其设置到GITHUB操作环境中
-运行:echo${{env.TMPDIR}}工作

您将使用
$TMPDIR
引用一个bash环境变量,您已经这样做了。您可以使用
${{env…}
上下文语法引用GitHub Actions变量。但这不是GitHub操作变量。为什么要在这里使用
${{env.TMPDIR}
?我觉得你没有解释你想做什么。这是测试代码。我试图在规范中使用${env.TMPDIR}来说明我在另一个规则中上载文件的位置。但我无法打印出失败的原因。这就是为什么我添加了这段代码,以便能够转储变量的值。我试图在WITH语句中使用它,试图指定要复制到的文件夹。MacOS有一个名为TMPDIR的环境变量。这相当于/tmp是大多数unix。我有写在那里的临时文件。我试图将这些复制为构建工件(正如您在原始问题中引用的示例中所看到的)。我正在尝试从存档规则访问该文件夹名称。名称:存档日志结果使用:操作/上载-artifact@v2with:name:Log Results(${matrix.displayTargetName}})路径:| Builds/${{matrix.config_name}}/PerformanceDump.txt/tmp/LOGS-ARCHIVE#${env.TMPDIR}/Trace*.txt的解决方法是在SHELL中(我可以看到环境变量的地方)复制到已知的硬连线位置。但是我不想做额外的复制,只需从macos/tmp目录(由环境变量命名)上传即可。如果您想使用
${{env.TMPDIR}}
,请执行我回答的操作,并将shell的
TMPDIR
设置为GitHub操作环境变量。很酷,谢谢您的建议。