dshkit

报错排查:装完 @deepseek-ai/dsh 还是 dsh: command not found

npm 全局 bin 目录不在 PATH 上、安装其实失败了、或者你装进了一个已经不用的 Node 版本。怎么分辨,以及各自怎么修。

更新于 2026-08-131 min
一句话结论

先用 npm ls -g --depth=0 确认包真的装上了,再用 npm bin -g 找到全局 bin 目录并加进 PATH。如果你用 nvm 或 fnm,全局安装只属于当时激活的那个 Node 版本。

安装打印了成功,shell 却不认。绝大多数情况是下面三种成因之一,而且有一条命令能直接分辨。

第一步:它到底装上了吗

npm ls -g --depth=0

在输出里找 @deepseek-ai/dsh

没有? 说明安装其实失败了,不管刚才滚过去的最后一行写了什么。重跑一遍,这次读输出的尾部而不是 最后一行:

npm install -g @deepseek-ai/dsh

有? 包在磁盘上,这是 PATH 问题,继续往下。

第二步:npm 的全局 bin 在 PATH 上吗

npm bin -g

它打印 npm 放全局可执行文件的目录,可能是 /usr/local/bin/opt/homebrew/bin~/.npm-global/bin。检查它在不在 PATH 里:

echo $PATH | tr ':' '\n' | grep -F "$(npm bin -g)"

没有输出就说明缺失。加进 shell 配置文件——现代 macOS 是 ~/.zshrc,多数 Linux 是 ~/.bashrc

export PATH="$(npm bin -g):$PATH"

然后开一个 shell,或者 source 一下。已经在跑的 shell 不会自己重读配置。

第三步:你还在当初装它的那个 Node 版本上吗

这条专门坑那些每一步都做对了的人。

nvmfnmvolta每个 Node 版本各自一套全局包目录。在 Node 20 下装的全局包,在 Node 22 下并不存在。如果你装好了 dsh,后来切换或升级了 Node,命令就消失了——原因就在这。

node -v
nvm ls        # 或者 fnm list

两条出路。在你现在用的版本下重装:

npm install -g @deepseek-ai/dsh

或者用 nvm 升级时把全局包一起迁移:

nvm install 22 --reinstall-packages-from=20

EACCES 变体

如果安装本身报 EACCES: permission denied,那是 npm prefix 指向了 root 拥有的目录。别用 sudo 糊, 详见 EACCES 权限报错怎么修

临时出口

在你捋 shell 配置的同时,你并没有被卡住:

npx @deepseek-ai/dsh web

npx 完全不碰 PATH,直接解析并运行这个包。

还是不行?

确认二进制文件真的在 npm 说的位置:

ls -l "$(npm bin -g)/dsh"

文件在却跑不起来,检查它有没有可执行权限(chmod +x),以及你是不是被某个 shell 别名或函数遮住了:

type -a dsh

type -a 会按解析顺序列出 shell 能看到的每一个 dsh——包括你早就忘掉的、写在某个配置文件里的别名。

常见问题

不修 PATH 能用吗?

能。npx @deepseek-ai/dsh web 不依赖 PATH。作为排查期间的临时办法很好用,如果你只是偶尔用 harness,长期这么用也没问题。

该用 sudo npm install -g 吗?

不该。它看起来能解决 EACCES,但会在 npm 缓存和全局目录里留下 root 拥有的文件,之后的安装会以更难定位的方式失败。改 npm prefix 或者用 Node 版本管理器。

接着看