为什么“ hash / bin / ls”什么都不做?

时间:2020-02-14 17:52:41

标签: bash shell unix hash terminal

将命令hash写入相对路径或绝对路径,无论是到文件,目录还是到任何地方,似乎都无济于事。

$> hash /bin/ls
prints nothing ***

$> hash /path/to/nowhere
prints nothing ***

$> hash ../same/as/above
same thing ***

那是为什么?

1 个答案:

答案 0 :(得分:0)

hash进行命令搜索并记住已解析的位置。当名称*中有斜杠时,命令搜索的一部分会跳过它。因此,hash foo/bar什么也不做。

相关POSIX规范:

hash

哈希实用程序将影响当前Shell环境记住命令搜索和执行中所描述的实用程序位置的方式。 [...]它将公用程序位置添加到其记忆位置列表中

Command Search and Execution

如果命令名至少包含一个<slash>,则外壳程序应在单独的实用程序环境中执行该实用程序,并执行等同于调用execl()函数的动作

[...]

一旦搜索并找到了一个实用程序(不带斜杠的调用)(作为此特定搜索的结果或作为未指定的Shell启动活动的一部分),实现可能会记住其位置并且无需搜索再次使用该实用程序


*偶然地,这就是为什么使用./myfile在当前目录中执行脚本的原因:这是使文件名包含斜杠的最短方法。

相关问题