如何在存储区中查找派生路径,从编译的包路径开始



我正在使用Nix 2.2.1,特别是这个NixOS Docker镜像。

我像这样安装 Vim:

# nix-env --install --file '<nixpkgs>' vim

Vim可执行文件的存储路径是

# readlink -f $(which vim)
/nix/store/8ayymgnlv77p0h8skf294323maabwq91-vim-8.1.0675/bin/vim

现在,我想从编译的包路径中找出存储中的派生路径。

我试过这个命令

# nix-store --query --deriver $(readlink -f $(which vim))
/nix/store/q5zqdr193d8k5w91lb9wqr1wk3418zix-vim-8.1.0675.drv

这确实在商店中返回了一条路径,但令我惊讶的是,该路径不存在!存储中有一个 vim 的派生,但它与命令的输出不匹配。

我也试过这个:

# nix-env --query --drv-path --file '<nixpkgs>' vim

但它并没有给出有用的结果:

vim-8.1.0675  -

我是否使用了错误的命令,或者这是一个错误?

您的nix-store调用看起来不错。

派生文件可能会被垃圾回收,除非您在 nix.conf 中设置了keep-derivations = true或在 NixOS 中设置了nix.extraOptions。这也许可以解释这种情况。

最新更新