假设您的
flake.nix
中有以下行:
foo = pkgs.stdenv.mkDerivation {
name = "foo";
buildPhase = ''
#some shell script
'';
installPhase = ''
#some shell script
'';
};
是否可以指定一个 shell(最好用
mkShell
定义,或作为路径传入)用于 buildPhase
、installPhase
等,而不是普通的旧 bash
?
我尝试重现每个文本块中其他地方指定的 shell 环境,感觉很不正常
语义上不一样,但您可以在派生中运行用其他语言编写的脚本。例如:
{
buildPhase = ''
./my-build-script.py
'';
}
这是不可能的,因为这些阶段在单个 shell 会话中一个接一个地运行。他们经常使用和设置局部变量。
构建输入提供的任何预定义阶段或设置挂钩也是为 Bash 设计的。
要使用另一个 shell,您需要将
derivation
与自定义构建器一起使用,这意味着放弃 mkDerivation
提供的所有基础设施,特别是包括输入传播和交叉编译。