删除特定可执行路径的 bash 哈希

Ale*_*lls 1 bash path command

gmx在这两条路径上调用了一个命令:

/usr/local/bin/gmx
Run Code Online (Sandbox Code Playgroud)

/Users/alexamil/.nvm/versions/node/v9.2.0/bin/gmx
Run Code Online (Sandbox Code Playgroud)

我怎样才能删除其中一个的 bash 哈希?

如果我跑:

hash -d gmx
Run Code Online (Sandbox Code Playgroud)

删除的是哪一个?是删除两者,还是只删除最近的值?这对删除特定的有效吗?

hash -d  "/Users/alexamil/.nvm/versions/node/v9.2.0/bin/gmx"
Run Code Online (Sandbox Code Playgroud)

Ste*_*itt 6

Bash 只记住每个名称的一个路径,因此它gmx(最多)只有一个路径。您可以通过运行查看是哪一个

hash -t gmx
Run Code Online (Sandbox Code Playgroud)

跑步

hash -d gmx
Run Code Online (Sandbox Code Playgroud)

将删除任何条目gmx(由 显示的条目hash -t)。下次您尝试运行时gmx,shell 将在您的 中列出的目录中查找它PATH,并将它找到的第一个存储为散列。

您不能删除特定值,但可以强制使用特定值,包括不在您的PATH:

hash -p /usr/local/bin/gmx gmx
Run Code Online (Sandbox Code Playgroud)

这将导致 shell/usr/local/bin/gmx在您键入时运行gmx

有关详细信息,请参阅Bash 手册