gpt4 book ai didi

Nix:派生如何在不调用构建器的情况下在 nix-shell 中设置 PATH?

转载 作者:行者123 更新时间:2023-12-05 03:48:15 25 4
gpt4 key购买 nike

推导需要很多参数,但只有其中一个参数 builder 是可执行的,对吗?

而且 nix-shell 并没有真正执行 builder,这意味着无法运行诸如 export PATH=....

但我发现其他一些派生提供了它们的虚拟 shell 环境,其中 PATH 是任意设置的,例如 haskell 包派生的 .env 属性。

我还发现 mkDerivationbuildInput 包的子 /bin 目录添加到 PATH(如果存在)。

他们是怎么做到的?内置派生函数是否有一些特殊参数,使您能够在评估时运行自定义命令?

最佳答案

另一种方法是在推导阶段导出特定路径 - 虽然我不确定这是否是正确的方法。

假设您在构建某些东西时需要一个包 cowsay 在您的路径中,然后您可以通过添加它来使其可用:

# ... 
<nixpkgs>.stdenv.mkDerivation{
# ...
buildPhase = ''
export PATH="${<nixpkgs>.cowsay}/bin:$PATH"
'';
# ...
}

这将使构建器在 buildPhase 期间执行该命令,并构建包并将其添加到构建阶段的路径中。您可以使用 shellHook

对 shell 的 mkDerivation 执行相同的操作
# ... 
<nixpkgs>.stdenv.mkDerivation{
# ...
shellHook = ''
export PATH="${<nixpkgs>.cowsay}/bin:$PATH"
'';
# ...
}

然后该路径将在您的 shell 环境中可用。

值得注意的是,默认情况下,如果构建派生(在 buildInputs 或其他任何地方,如果它有一个 ./bin/ 目录,则创建可用于环境。

关于Nix:派生如何在不调用构建器的情况下在 nix-shell 中设置 PATH?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64539058/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com