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

问题描述 投票:0回答:1

用一些相对或绝对路径写命令hash,无论是到文件,目录还是到无处,似乎都无济于事。

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

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

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

为什么?

bash shell unix hash terminal
1个回答
0
投票

hash执行命令搜索并记住已解析的位置。当名称*中有斜杠时,命令搜索的一部分会跳过它。因此,hash foo/bar不执行任何操作。

相关POSIX规范:

hash

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

Command Search and Execution

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

[...]

一旦找到并找到了一个实用程序[不带斜线调用](作为此特定搜索的结果或作为未指定的shell启动活动的一部分),实现可以记住其位置,而无需搜索再次实用]


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

© www.soinside.com 2019 - 2024. All rights reserved.