You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用nix-env --set命令且不丢失nix-env的访问权限?

解决nix-env --set后丢失Nix命令的问题

核心原因

nix-env --set会完全替换你的用户profile,如果指定的derivation里没包含nix包,profile的PATH里就不会有Nix工具链的bin目录,自然找不到nix-env、nix这些命令。

可行解决方案

1. 让你的derivation包含nix包

直接把nix包加入到derivation的依赖中,这样替换profile后Nix命令会保留。比如你的derivation配置可以这么写:

{ pkgs ? import <nixpkgs> {} }:
pkgs.mkDerivation {
  name = "my-custom-env";
  # 用propagatedBuildInputs确保依赖的bin目录被加入PATH
  propagatedBuildInputs = [ pkgs.nix ];
  # 其他自定义配置...
}

构建这个derivation后再执行nix-env --set <derivation-name>,就不会丢失Nix命令了。

2. 改用nix-env --install代替--set

如果不需要完全替换现有profile,只是想添加自定义derivation的内容,用nix-env --install <derivation-name>就不会影响已有的Nix命令,因为它是往profile里追加内容而不是替换。

3. 临时恢复后修正derivation

如果已经出现命令丢失的情况,可以用Nix的绝对路径临时执行命令:

# 先找到nix包的store路径,比如通过ls /nix/store | grep nix-
/nix/store/xxxxxx-nix-2.18.1/bin/nix-env --install nix

之后再修改你的derivation加入nix包,重新构建并执行--set即可。

内容的提问来源于stack exchange,提问作者James Flight

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 16:10:32