Ubuntu 24.04终端启动提示bash: hash: hashing disabled的问题咨询
Ubuntu 24.04终端启动提示bash: hash: hashing disabled的问题咨询
我来帮你梳理这个问题的解决方案和背后的原因:
首先先明确基础概念:bash的hash功能是用来缓存你最近执行过的命令的路径,这样下次调用相同命令时不用重新遍历PATH查找路径,能加快命令执行速度。你看到的bash: hash: hashing disabled提示,说明当前shell的哈希功能被关闭了。
1. 能不能启用哈希?
当然可以!你有两种方式来恢复哈希功能:
- 临时启用:直接在当前终端里执行
set -h,这会立刻恢复当前shell的哈希功能,但关闭终端后下次启动会失效。 - 永久启用:如果想每次启动终端都自动启用,你可以把
set -h添加到加载nvm脚本的那一行后面,修改成这样:
这样每次加载完nvm后,都会自动开启哈希功能。不过这里要提醒你,这么做可能会带来nvm版本切换的小问题,我后面会解释原因。[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" && set -h
2. 为什么哈希会被禁用?
大概率是nvm脚本主动关闭了哈希功能,核心原因是避免版本切换时的命令路径冲突。
举个实际的例子:当你用nvm切换到Node.js 18版本时,node命令的实际路径是nvm管理的18版本目录下的路径;如果你之后切换到Node.js 20版本,node的实际路径已经变更,但如果哈希功能处于开启状态,bash会缓存之前Node.js 18版本的node命令路径,导致你执行node时仍然调用旧版本的命令,而不是新切换的20版本。
nvm禁用哈希后,每次执行node、npm这类和版本强相关的命令时,bash都会重新遍历PATH找到当前nvm激活版本对应的命令路径,确保你用的是正确的版本。
如果你选择手动开启哈希功能,记得在切换nvm版本后,执行hash -r来清空哈希缓存,这样新的命令路径才会被正确识别。
备注:内容来源于stack exchange,提问作者Alexander Zeitler
相关产品推荐
相关产品推荐

