linux--hash表初探

说明:linux系统下会有一个hash表,当你刚开机时这个hash表为空,每当你执行过一条命令时,hash表会记录下这条命令的路径,就相当于缓存一样。第一次执行命令shell解释器默认的会从PATH路径下寻找该命令的路径,当你第二次使用该命令时,shell解释器首先会查看hash表,没有该命令才会去PATH路径下寻找(具体的查找机制,可以看另一篇文章)。

特别地,(1)hash不会记录function, built-in命令(其实还包括alias),因为他们没有路径, 即不会存在于某个目录之下, 它们是随shell而加载进而存在于内存中, 所以这样的命令没有必要进行缓存以提高搜索效率

(2)alias中若定义的是包含了路径的别名命令则不会被记录到hash中, 只有没有指定路径的alias才会被记录到hash中.

 

hash: hash [-lr] [-p pathname] [-dt] [name …]

Remember or display program locations.

Determine and remember the full pathname of each command NAME.  If

no arguments are given, information about remembered commands is displayed

Options:

-d                forget the remembered location of each NAME

-l                display in a format that may be reused as input

-p pathname        use PATHNAME is the full pathname of NAME

-r                forget all remembered locations

-t                print the remembered location of each NAME, preceding

each location with the corresponding NAME if multiple

NAMEs are given

 

”set +h”用于禁用hash而”set -h”用于启用hash.

点赞

发表评论

电子邮件地址不会被公开。