用一些相对或绝对路径写命令hash
,无论是到文件,目录还是到无处,似乎都无济于事。
$> hash /bin/ls
prints nothing ***
$> hash /path/to/nowhere
prints nothing ***
$> hash ../same/as/above
same thing ***
为什么?
hash
执行命令搜索并记住已解析的位置。当名称*中有斜杠时,命令搜索的一部分会跳过它。因此,hash foo/bar
不执行任何操作。
相关POSIX规范:
hash:
哈希实用程序将影响当前shell环境记住命令查找和执行中所描述的实用程序位置的方式。 [...]它将公用程序位置添加到其记忆位置列表中
如果命令名称包含至少一个
<slash>
,则外壳程序应在单独的实用程序环境中执行该实用程序,并执行等效于调用execl()函数的动作[...]
一旦找到并找到了一个实用程序[不带斜线调用](作为此特定搜索的结果或作为未指定的shell启动活动的一部分),实现可以记住其位置,而无需搜索再次实用]
*这就是为什么您用./myfile
在当前目录中执行脚本的原因:这是使文件名包含斜杠的最短方法。