我最近从 Windows 全职转到 Linux,当我尝试npm
使用 更新我的软件包时n
,我获取了新的二进制文件,/usr/local/bin
而以前的版本在/usr/bin
。因此,它总是选择以前的版本。
根据其他用户的建议,我使用了hash-r
命令,并且成功了。但是,我不知道它做了什么。
如果有人能向我解释其内部原理的话将会非常有帮助。
答案1
hash
是 shell 的内置命令bash
。要了解它的功能,您可以help hash
在 shell 提示符下输入:
$ help hash
hash: hash [-lr] [-p pathname] [-dt] [name ...]
Remember or display program locations.
Determine and remember the full pathname of each command NAME. If
no arguments are given, information about remembered commands is displayed.
Options:
-d forget the remembered location of each NAME
-l display in a format that may be reused as input
-p pathname use PATHNAME as the full pathname of NAME
-r forget all remembered locations
-t print the remembered location of each NAME, preceding
each location with the corresponding NAME if multiple
NAMEs are given
Arguments:
NAME Each NAME is searched for in $PATH and added to the list
of remembered commands.
Exit Status:
Returns success unless NAME is not found or an invalid option is given.
因此,hash
记住程序位置,然后hash -r
忘记它们。
答案2
shell 跟踪 npm 等可执行文件所在的位置,以避免每次想要运行某个程序时都必须搜索 PATH 环境变量。
hash 的 -r(重置)参数清除缓存。
如果您想查看 hash 记住了哪些命令,只需单独输入 hash 即可,无需任何参数。
您可以通过输入 set +h 完全禁用缓存,然后通过 set -h 重新启用它