从存储路径转到nix repl中的派生

时间:2019-11-21 06:39:21

标签: nix

我要调试的软件包之一隐藏在一些派生链接中。我在其中一个路径中找到了一个引用,但这是我不能拉入nix repl内的字符串。有没有办法从nix存储路径(尚不存在,因为这是失败的派生)转到nix派生对象?

nix-repl> de.dev.packages.hie-bios.pkgs  
"[{\"paths\":[\"/nix/store/f04qyvqaj6s6y5f5a7svpfppsq5wx2p6-haskell-ide-engine-ghc864-7541d1ec71\"],\"priority\":-864}]"

1 个答案:

答案 0 :(得分:0)

似乎不太可能。 Nix语言的确可以让您访问字符串上下文,但是字符串上下文并不是要重现派生词,更不用说派生词的原始表达了。

nix-repl> :p builtins.getContext "example string ${(import <nixpkgs> {}).hello.outPath}"  
{ "/nix/store/m2capxzda4ams4fi3awmriz7hfkdxyp9-hello-2.10.drv" = { outputs = [ "out" ]; }; }

从技术上讲,您可以读取派生内容并解析ATerm等内部内容,但这实际上不受支持。它不处理字符串上下文,可能不会让您构建任何东西并杀死您的狗。即便如此,您也不会找回原始表达式。

nix-repl> :p builtins.readFile (builtins.head (builtins.attrNames (builtins.getContext "example string ${(import <nixpkgs> {}).hello.outPath}")))
"Derive([(\"out\",\"/nix/[...]

最好直接解决您的hie-bios问题。