Laz*_*zer 1 linux shell shell-script hashing
我正在寻找rehash
命令的作用并找到了这个:
rehash 命令重新计算路径环境变量中列出的目录内容的内部哈希表,以说明添加的新命令。
我从来不知道任何内部哈希表。为什么以及如何维护它们?
当您输入命令时,如果没有哈希表,shell 将检查$PATH
变量中列出的每个目录,以查看是否在那里找到您的命令。
如果这些目录中的任何一个连接到慢速设备,这可能是一个缓慢的过程。每次输入命令时都会暂停。
因此,当 shell 开始运行时,它会读取其中的每个目录$PATH
并确定所有可执行程序是什么,然后将此列表存储到内存中的哈希表中。然后,它就不需要再次检查它们,它可以快速知道您键入的命令是否有效。
只要您从不添加或删除程序,这就会很好地工作,因为一旦您这样做,哈希表就会过时。该rehash
命令的目的是要求 shell 再次读取程序列表。
以上适用于csh
和tcsh
。
使用bash
shell,它不会在启动时读入所有程序的名称。它确实保留了一个哈希表,但它只会在您键入命令时将内容放入其中。例如:
bash-3.2$ ls
foo bar baz
bash-3.2$ cp
cp: missing file operand
Try `cp --help' for more information.
bash-3.2$ hash
hits command
1 /bin/cp
1 /bin/ls
Run Code Online (Sandbox Code Playgroud)
它记住了cp
和ls
命令的位置。