我正在使用 Nix 2.2.1,特别是这个NixOS Docker 镜像。
我像这样安装 Vim:
# nix-env --install --file '<nixpkgs>' vim
Run Code Online (Sandbox Code Playgroud)
Vim 可执行文件的存储路径是
# readlink -f $(which vim)
/nix/store/8ayymgnlv77p0h8skf294323maabwq91-vim-8.1.0675/bin/vim
Run Code Online (Sandbox Code Playgroud)
现在想从编译好的包路径中找出store中的派生路径。
我试过这个命令
# nix-store --query --deriver $(readlink -f $(which vim))
/nix/store/q5zqdr193d8k5w91lb9wqr1wk3418zix-vim-8.1.0675.drv
Run Code Online (Sandbox Code Playgroud)
这确实返回了商店中的路径,但令我惊讶的是,该路径不存在!商店中有一个vim的派生,但它与命令的输出不匹配。
我也试过这个:
# nix-env --query --drv-path --file '<nixpkgs>' vim
Run Code Online (Sandbox Code Playgroud)
但它没有给出有用的结果:
vim-8.1.0675 -
Run Code Online (Sandbox Code Playgroud)
我是否使用了错误的命令,还是这是一个错误?
你的nix-store调用看起来没问题。
派生文件可能会被垃圾收集,除非您在 NixOS中keep-derivations = true设置。这或许可以解释目前的情况。nix.confnix.extraOptions