在Nix中使用mkDerivation时,是否可以指定`buildPhase`使用的shell?

问题描述 投票:0回答:2

假设您的

flake.nix
中有以下行:

        foo = pkgs.stdenv.mkDerivation {
          name = "foo";
          buildPhase = ''
            #some shell script
          '';
          installPhase = ''
            #some shell script
          '';
        };

是否可以指定一个 shell(最好用

mkShell
定义,或作为路径传入)用于
buildPhase
installPhase
等,而不是普通的旧
bash

我尝试重现每个文本块中其他地方指定的 shell 环境,感觉很不正常

nix nixos flake
2个回答
1
投票

语义上不一样,但您可以在派生中运行用其他语言编写的脚本。例如:

{
  buildPhase = ''
    ./my-build-script.py
  '';
}

0
投票

这是不可能的,因为这些阶段在单个 shell 会话中一个接一个地运行。他们经常使用和设置局部变量。

构建输入提供的任何预定义阶段或设置挂钩也是为 Bash 设计的。

要使用另一个 shell,您需要将

derivation
与自定义构建器一起使用,这意味着放弃
mkDerivation
提供的所有基础设施,特别是包括输入传播和交叉编译。

© www.soinside.com 2019 - 2024. All rights reserved.