构建器脚本应该放置在独立nix表达式的哪个位置?
问题描述:
我有一个尼克斯表达式文件(.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."
'';
答
尝试把一个分号该行的结束和删除单引号:
builder = ./my-builder.sh;
然后仔细检查,以确保my-builder.sh
是在同一目录中.nix
文件,你写的。
哎呀,我会编辑的问题。这实际上是一个抄本错误 - 我得到的不是复制/粘贴。所以,我事实上已经做到了。他们肯定在同一个目录中。我也会用编辑#2编辑一下,指出一个完整的例子。 – bbarker
符号链接是可疑的,因为它看起来像你可能会指望尼克斯为你取消引用该链接,以便它知道文件的真实位置。虽然我不确定。如果你可以做一个不涉及符号链接的例子,它可能会有所帮助。 –
显然,我的问题是,周围的报价我周围的建设者脚本相对路径(不知道为什么这是一个问题)。除此之外,我还有其他问题,所以最后使用了一个内置的“虚拟”脚本。我会发布解决方案,我最后与 – bbarker