1

我的 PATH 中有 /usr/bin,稍后在 PATH 中有点(表示当前目录)。我在 /var 和 /someother 这两个目录中有一个程序“abcxyz”。如果我在 /var 中的 mate 终端中并键入一些荒谬的名称 dgxuznk,那么 bash 会如您所料那样说:“bash: dgxuznk: command not found”。如果我现在在 /usr/bin 中创建一个名为 dgxuznk 的链接,指向 /someother 中的程序,它会运行该程序,正如您所期望的那样。但是,如果我现在删除该链接,它不再说“找不到命令”,而是说“bash:/usr/bin/dgxuznk:没有这样的文件或目录”。就好像它记得它之前在哪里找到它,并希望再次在 /usr/bin 下找到它。

更糟糕的是,如果我现在将 /var(我所在的位置)中的程序重命名为 dgxuznk,并键入“dgxuznk”,它仍然会抱怨“bash:/usr/bin/dgxuznk:没有这样的文件或目录”,就好像它可以' t 越过 PATH 中的 /usr/bin 以查看该点并在当前目录中查找该程序。

这仅在 Fedora 19 中吗?如何对其进行编程以通过搜索路径中的 /usr/bin 并找到当前目录点?

(提示:如果你想重现这个错误 - 不要让它在当前目录中找到程序,直到它在 /usr/bin 中找到它。)

4

1 回答 1

6

bash维护找到程序的内存散列,以便每次运行命令时都不必进行完整路径查找。每个bash会话都维护自己的哈希,但您可以使用内置hash命令对其进行操作。要查看哈希中的内容,只需不带参数运行它即可。要清除它,请使用hash -r. 在您的情况下,您只想删除dgxuznkwith hash -d gdxuznk

(您可能会问,bash如果找不到位置,为什么不直接从哈希中删除条目。报告错误而不是退回到路径查找可能是一个很好的理由,或者它可能是一个错误或一个区域来改进。)

于 2016-03-31T12:28:11.053 回答