2017-09-08 32 views
0

我有一个尼克斯表达式文件(.nix)和壳脚本生成器,等指定:构建器脚本应该放置在独立nix表达式的哪个位置?

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-build的环境,然后每当我想用它(使用nix-shell)实际快速运行环境。

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

EDIT#2: 我的具体例子如下:

This line放两个尼克斯表达并以相同的目录中的助洗剂。 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

尝试把一个分号该行的结束和删除单引号:

builder = ./my-builder.sh; 

然后仔细检查,以确保my-builder.sh是在同一目录中.nix文件,你写的。

+0

哎呀,我会编辑的问题。这实际上是一个抄本错误 - 我得到的不是复制/粘贴。所以,我事实上已经做到了。他们肯定在同一个目录中。我也会用编辑#2编辑一下,指出一个完整的例子。 – bbarker

+0

符号链接是可疑的,因为它看起来像你可能会指望尼克斯为你取消引用该链接,以便它知道文件的真实位置。虽然我不确定。如果你可以做一个不涉及符号链接的例子,它可能会有所帮助。 –

+0

显然,我的问题是,周围的报价我周围的建设者脚本相对路径(不知道为什么这是一个问题)。除此之外,我还有其他问题,所以最后使用了一个内置的“虚拟”脚本。我会发布解决方案,我最后与 – bbarker

相关问题