【问题标题】:Bash 'type someCmd' : what means 'hashed'? (different outputs for 'type mkdir')Bash 'type someCmd' :'hashed' 是什么意思? ('type mkdir' 的不同输出)
【发布时间】:2017-03-16 01:42:51
【问题描述】:

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

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执行的同一个脚本输出不一样?

【问题讨论】:

    标签: bash shell types mkdir scite


    【解决方案1】:

    区别在于情境:

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

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

    因此,在给定会话中执行mkdir 之前type mkdir 返回:

    mkdir is /bin/mkdir
    

    在至少执行一次mkdirtype mkdir 然后报告:

    mkdir is hashed (/bin/mkdir)
    

    您可以使用hash -r 告诉bash“忘记”所有记住的路径,或者使用hash -d <name> 选择性地使用;只需 hash 打印所有当前散列的路径及其命中数 - 请参阅 help hash

    【讨论】:

      猜你喜欢
      • 2015-08-20
      • 2020-09-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-10-23
      • 1970-01-01
      • 2011-04-16
      相关资源
      最近更新 更多