在shell中,内建(builtin)命令hash,格式如下:
hash [-lr] [-p filename] [-dt] [name]
hash命令的作用是在环境变量PATH中搜索命令name的完整路径并记住它,这样以后再次执行相同的命令时,就不必搜索其完整路径了,而且shell每次执行环境变量PATH中的一个命令时,hash都会记住它。当hash不指定任何参数时,显示当前hash列表,包括每个命令的完整路径和执行次数。选项“-l”用于显示当前hash列表中的命令及完整路径等信息。选项“-r”用于清空hash列表。选项“-p filename”用于指定命令name的路径,路径filename是一个文件而非目录。选项“-d”用于从hash列表中移除命令name对应的记录。选项“-t”用于显示hash列表中命令name的完整路径。成功执行时,hash命令的退出状态为0。
如下是hash命令的几个例子(启动一个新的shell终端开始执行):
$ hash
hash: hash table empty
$ hash ls
$ hash top
$ ps > /dev/null
$ uname > /dev/null
$ uname > /dev/null
$ hash
hits command
1 /bin/ps
2 /bin/uname
0 /bin/ls
0 /usr/bin/top
$ hash -t ps
/bin/ps
$ hash -d uname
$ hash
hits command
2 /bin/ps
0 /bin/ls
0 /usr/bin/top
$ hash -l
builtin hash -p /bin/ps ps
builtin hash -p /bin/ls ls
builtin hash -p /usr/bin/top top
$ hash -r
$ hash
hash: hash table empty
我们也可以自定义一个命令,例如“hash -p script_path foo”,命令的名字为foo,对应的shell脚本的完整路径为script_path,然后执行foo命令时,实际执行的就是其对应的shell脚本。