问题描述
我没有找到任何关于在 Nix 派生中处理临时文件的信息。
我找到了 $TMP
和 $TMPDIR
环境变量,但它们都指向 /tmp
,这是系统全局变量。
{
pkgs ? import <nixpkgs> {}
}:
pkgs.stdenv.mkDerivation {
pname = "show-tmp"
version = "0.1.0";
src = ./.;
configurePhase = ''
echo "tmp = $tmp; TMP = $TMP; TMPDIR = $TMPDIR"
'';
buildPhase = '':'';
installPhase = '':'';
}
变量 $tmp
未在 mkDerivation 中定义。我期待这样的事情,因为其他派生范围变量遵循小写样式,例如 $out
。
/tmp 的问题很明显——它是全局目录。 我需要担心碰撞和清洁。
解决方法
如果您使用的是 Linux,请不要担心。 Nix 沙箱将为您的构建提供自己的空 /tmp
。推导完成后,它会被删除。
在 macOS 上,$TMP
和 $TMPDIR
已得到处理,但 /tmp
是一个潜在问题。
达尔文:
nix-build --expr 'with import <nixpkgs> {}; runCommand "hi" {} "echo a > /tmp/a; ls -al /tmp; sleep 1;"'
ls -al /private/tmp/
...
-rw-r--r-- 1 nixbld1 wheel 2 May 19 12:49 a
...
这是在 2020 年初我安装了 Nix 的 macOS 机器上。