2

令我困惑的是,运行这个两行脚本时我得到了不同的输出:

help | head -n1
type mkdir

从 SciTE 内部(这里是 SciTE 输出面板输出):

GNU bash, version 4.3.46(1)-release (x86_64-pc-linux-gnu)
mkdir is /bin/mkdir

并从终端窗口(此处为终端输出)中:

GNU bash, version 4.3.46(1)-release (x86_64-pc-linux-gnu)
mkdir is hashed (/bin/mkdir)

为什么同一个 shell 执行的同一个脚本给出的输出不一样?

4

1 回答 1

3

区别在于情况:

第一次仅通过文件名在给定会话中bash执行外部实用程序(无论成功与否),它会记住其完整路径以便稍后更快地重新执行(无需再次$PATH在变量中列出的所有目录中查找实用程序) .

这种记忆(缓存)称为散列,并通过 builtin 隐式发生hash

因此,before在给定的 session中执行mkdirtype mkdir返回:

mkdir is /bin/mkdir

在执行mkdir了至少一次之后type mkdir然后报告:

mkdir is hashed (/bin/mkdir)

您可以使用 ;或有选择地告诉bash“忘记”所有记住的路径;只打印所有当前散列的路径和它们的命中数 - 请参阅.hash -rhash -d <name>hashhelp hash

于 2017-03-16T02:13:26.980 回答