对于独立的 nix 表达式,构建器脚本应该位于何处?

Where should the builder script be located for a stand-alone nix expression?

我有一个 nix 表达式文件 (.nix) 和一个 shell 脚本生成器,指定如下:

stdenv.mkDerivation rec {
    name = "my-env";
    builder = './my-builder.sh';
    ...

./my-builder.sh: No such file or directory当我运行nix-build ./my-env.nix; nix 表达式文件和构建器脚本并排放置在我的主目录中。

我的意图是使用这个 nix 表达式文件来准备使用 nix-build 的环境,然后在我想使用它时实际快速 运行 环境(使用 nix-shell) .

编辑:我刚刚注意到 nix-shell ./ my-env.nix 工作正常;到目前为止,我实际上并没有构建任何东西,所以我可能应该省略 builder.

编辑#2: 我的具体例子如下:

This line puts both the nix expression and the builder in the same directory. This other line 使用 nix-shell 来准备环境,但我假设可以使用类似的 nix-build 命令(特别是如果想要安装自定义包作为环境的一部分, 但也许这在 Nix 中不是很惯用)

解决方案

关于构建者路径的引述显然是一个禁忌。我最终遇到了其他问题,并将其拼凑在一起最终得到 运行:

builder = builtins.toFile "builder.sh" ''
  source $stdenv/setup
  mkdir -p $out
  echo "" > $out/Done
  echo "Done setting up Scala environment."
'';

尝试在行尾放置一个分号并删除单引号:

builder = ./my-builder.sh;

然后仔细检查以确保 my-builder.sh 与您编写的 .nix 文件位于同一目录中。