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

时间:2017-09-08 12:03:29

标签: nix nixpkgs

我有一个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将nix表达式和构建器放在同一目录中。 This other line使用nix-shell来准备环境,但我假设可以使用类似的nix-build命令(特别是如果想要在环境中安装自定义程序包,但可能是在尼克斯不是很惯用)

解决方案

建筑师路径周围的行情显然是禁止的。我最终遇到了其他问题,并将这些问题拼凑在一起以最终得到运行的东西:

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

1 个答案:

答案 0 :(得分:1)

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

builder = ./my-builder.sh;

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