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

如何在Nix Shell中添加其他派生的bin目录至PATH?

解决方法:使用mkShell自动配置PATH

要让nix-shell的环境自动包含目标派生的bin/目录,最简洁的方式是使用Nixpkgs提供的mkShell函数——它专门用于构建交互式shell环境,会自动处理依赖的PATH配置。

修改后的foo.nix代码

let
  # 导入Nixpkgs集合,用于获取mkShell工具
  pkgs = import <nixpkgs> {};
  # 拉取你的haskell-script仓库
  git = builtins.fetchGit {
    url = https://github.com/ingun37/haskell-script.git;
    rev = "e96ac79d6bf338c98697bb4ba510f22cb5f502ac";
  };
  # 导入派生定义
  haskellScriptD = import git {};
in
# 使用mkShell创建shell环境,将目标派生加入buildInputs
pkgs.mkShell {
  buildInputs = [ haskellScriptD ];
}

为什么这样能生效?

mkShell的buildInputs参数会自动触发Nixpkgs的标准钩子,把每个依赖派生的bin/目录添加到PATH环境变量中。这样当你执行nix-shell foo.nix进入沙箱后,直接输入json-generator就能运行对应的可执行文件,不需要手动指定路径。

验证命令

直接执行以下命令即可测试:

nix-shell foo.nix --run json-generator

备选方案:手动配置PATH(如果需要更灵活的控制)

如果因为某些原因不想用mkShell,也可以通过shellHook手动设置PATH:

let
  pkgs = import <nixpkgs> {};
  git = builtins.fetchGit {
    url = https://github.com/ingun37/haskell-script.git;
    rev = "e96ac79d6bf338c98697bb4ba510f22cb5f502ac";
  };
  haskellScriptD = import git {};
in
pkgs.mkShell {
  shellHook = ''
    # 手动将目标派生的bin目录追加到PATH最前面
    export PATH="${haskellScriptD}/bin:$PATH"
  '';
}

你原来的代码问题所在

你之前创建的是一个普通的derivation,它的设计目的是构建输出产物,而非配置交互式shell环境。这类派生不会自动处理依赖的PATH注入,因此你必须手动指定完整路径才能运行命令。

内容的提问来源于stack exchange,提问作者Ingun전인건

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.09 15:52:52