如何从 nix 表达式中获取 "name" 字段?
How to get "name" field out of nix expression?
鉴于以下 default.nix
,
{ stdenv, fetchurl, perl }:
stdenv.mkDerivation {
name = "hello-2.1.1";
builder = ./builder.sh;
src = fetchurl {
url = ftp://ftp.nluug.nl/pub/gnu/hello/hello-2.1.1.tar.gz;
md5 = "70c9ccf9fac07f762c24f2df2290784d";
};
inherit perl;
}
如何使用 nix-instantiate
从 name
字段中获取值 hello-2.1.1
?
$ nix-instantiate --eval -E 'name' default.nix
error: undefined variable ‘name’ at (string):1:1
您的 nix-instantiate
调用正在执行的操作是尝试从几乎为空的范围中检索 name
。这里缺少的是 NixPkgs 中实现的一项功能,它为 default.nix
中的函数提供了参数。
让我们从您当前的 <nixpkgs>
:
中获取 callPackage
函数
(import <nixpkgs> {}).callPackage
callPackage
需要两个参数,一个定义包的函数和一组覆盖的属性。您可以提供文件引用,而不是直接提供函数。
(import <nixpkgs> {}).callPackage ./. {}
现在让我们得到名字
((import <nixpkgs> {}).callPackage ./. {}).name
和运行它
$ nix-instantiate --eval -E '((import <nixpkgs> {}).callPackage ./. {}).name'
"hello-2.1.1"
为了试验 Nix,我更喜欢使用 nix-repl
。它更易于使用并且具有制表符补全功能。
$ nix-env -iA nixpkgs.nix-repl
$ nix-repl
nix-repl> ((import <nixpkgs> {}).callPackage ./. {}).name
"hello-2.1.1"
鉴于以下 default.nix
,
{ stdenv, fetchurl, perl }:
stdenv.mkDerivation {
name = "hello-2.1.1";
builder = ./builder.sh;
src = fetchurl {
url = ftp://ftp.nluug.nl/pub/gnu/hello/hello-2.1.1.tar.gz;
md5 = "70c9ccf9fac07f762c24f2df2290784d";
};
inherit perl;
}
如何使用 nix-instantiate
从 name
字段中获取值 hello-2.1.1
?
$ nix-instantiate --eval -E 'name' default.nix
error: undefined variable ‘name’ at (string):1:1
您的 nix-instantiate
调用正在执行的操作是尝试从几乎为空的范围中检索 name
。这里缺少的是 NixPkgs 中实现的一项功能,它为 default.nix
中的函数提供了参数。
让我们从您当前的 <nixpkgs>
:
callPackage
函数
(import <nixpkgs> {}).callPackage
callPackage
需要两个参数,一个定义包的函数和一组覆盖的属性。您可以提供文件引用,而不是直接提供函数。
(import <nixpkgs> {}).callPackage ./. {}
现在让我们得到名字
((import <nixpkgs> {}).callPackage ./. {}).name
和运行它
$ nix-instantiate --eval -E '((import <nixpkgs> {}).callPackage ./. {}).name'
"hello-2.1.1"
为了试验 Nix,我更喜欢使用 nix-repl
。它更易于使用并且具有制表符补全功能。
$ nix-env -iA nixpkgs.nix-repl
$ nix-repl
nix-repl> ((import <nixpkgs> {}).callPackage ./. {}).name
"hello-2.1.1"