我有一个 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."
'';