代码之家  ›  专栏  ›  技术社区  ›  Gspia

如何使阴谋集团被发现在一个straigthforward尼克斯药丸8.1模仿?

  •  0
  • Gspia  · 技术社区  · 7 年前

    在下面的例子中没有找到阴谋集团,问题是,如何纠正这个例子,从而找到阴谋集团。

    the nix pill 8.1 nix-repl ,键入 :l <nixpkgs> 然后 "${cabal-install}" 给出了cabal安装所在存储的路径,其中包含子目录,其中bin包含cabal可执行文件。即。

    > /nix/store/pathtocabal-install/bin/cabal -v
    cabal-install version 2.0.0.0
    compiled using version 2.0.0.2 of the Cabal library
    

    在下面,您应该可以找到与“make c”示例相对应的文件。

    有了他们

    > nix-build hello.nix
    

    不起作用。它首先告诉我们构建“这些派生”,然后说

    hello_builder.sh: line 2: cabal: command not found
    

    我怀疑$cabal install/bin是一种错误的方式来指代cabal,但在 找到其存储路径。

    你好,建筑商。sh甚至比c示例中的还要短。请注意,安装部分仍然缺失(首先应让建造商找到阴谋集团)。

    export PATH="$coreutils/bin:$ghc/bin:$cabal-install/bin:$binutils/bin"
    cabal build hello
    

    你好nix-可能不需要binutils。

    with (import <nixpkgs> {});
    derivation {
      name = "hello";
      builder = "${bash}/bin/bash";
      args = [ ./hello_builder.sh ];
      inherit binutils coreutils ghc cabal-install;
      src = ./hello.cabal;
      system = builtins.currentSystem;
    }
    

    你好阴谋集团-in nix-shell 有了阴谋集团安装和ghc,这是可行的。

    name:                hello
    version:             0.1.0.0
    build-type:          Simple
    cabal-version:       >=1.24
    
    executable hello
      main-is:             hello.hs
      default-language:    Haskell2010
      build-depends:       base              >=4.9 && <4.10
    

    module Main where
    
    main :: IO ()
    main = putStrLn "Hello there!"
    

    延迟添加:

    通过添加 echo $PATH 对于构建者来说,我们可以看到路径不正确。它是 /nix/store/...coreutils-8.28/bin:/nix/store...ghc-8.0.2/bin:-install/bin:/nix/store/...binutils-2.28.1/bin $cabal 转换为空字符串,并且它不是指 $cabal-install . 因此,cabal可执行文件没有正确的存储路径。

    这部分回答了问题的原因部分以及如何纠正它。开放的部分是为什么,为什么 inherit cabal-install 不能在此处使用。

    1 回复  |  直到 7 年前
        1
  •  1
  •   Emmanuel Rosa    7 年前

    问题在于 inherit cabal-install; cabal-install 在BASH中不是有效的变量名。Nix将提供给的集合中的键转换为 derivation 转换为BASH中的变量。

    而不是 继承阴谋安装; cabal_install = cabal-install; 然后使用 cabal_install