对于独立的 nix 表达式,构建器脚本应该位于何处?
Where should the builder script be located for a stand-alone nix expression?
我有一个 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 puts both the nix expression and the builder in the same directory. This other line 使用 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."
'';
尝试在行尾放置一个分号并删除单引号:
builder = ./my-builder.sh;
然后仔细检查以确保 my-builder.sh
与您编写的 .nix
文件位于同一目录中。
我有一个 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 puts both the nix expression and the builder in the same directory. This other line 使用 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."
'';
尝试在行尾放置一个分号并删除单引号:
builder = ./my-builder.sh;
然后仔细检查以确保 my-builder.sh
与您编写的 .nix
文件位于同一目录中。