0

我有一个 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:我的具体示例如下:

这一行将nix 表达式和构建器放在同一个目录中。另一行用于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."
'';
4

1 回答 1

1

尝试在行尾添加分号并删除单引号:

builder = ./my-builder.sh;

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

于 2017-09-08T19:07:35.950 回答