我的PATH中有/ usr / bin,后来在PATH中有点(表示当前目录)。我在两个目录中有一个程序'abcxyz',/ var和/ someother。如果我在/ var中使用mate-terminal并键入一些荒谬的名字,dgxuznk,那么bash说:“bash:dgxuznk:command not found”如你所料。如果我现在在/ usr / bin中创建一个名为dgxuznk的链接指向/ someother中的程序,它也会运行程序,也就像你期望的那样。但是,如果我现在删除该链接,它不再说“命令未找到”,而是“bash:/ usr / bin / dgxuznk:没有这样的文件或目录”。就好像它记得它之前发现它的位置,并期望再次在/ usr / bin下找到它。
更糟糕的是,如果我现在将/ var(我在哪里)的程序重命名为dgxuznk,并键入“dgxuznk”,它仍会抱怨“bash:/ usr / bin / dgxuznk:没有这样的文件或目录”,就像它无法通过PATH中的/ usr / bin来查看点并查看当前目录以查找程序。
这仅适用于Fedora 19吗?如何编程以通过搜索路径中的/ usr / bin并找到当前目录点?
(提示:如果你想重现这个错误 - 不要让它在当前目录中找到该程序,直到它在/ usr / bin中找到它。)
答案 0 :(得分:6)
bash
维护一个内存中的散列,其中包含找到程序的位置,这样每次运行命令时都不必经过完整的路径查找。每个bash
会话都维护自己的哈希值,但您可以使用内置的hash
命令对其进行操作。要查看哈希中的内容,只需运行它不带参数。要清除它,请使用hash -r
。在您的情况下,您只想删除dgxuznk
与hash -d gdxuznk
。
(您可能会问为什么bash
不会仅在找不到位置时从哈希中删除条目。可能有充分的理由报告错误而不是回退到路径查找,或者它可能是一个错误或需要改进的领域。)