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