类型强制 PATH 搜索的问题

类型强制 PATH 搜索的问题

这是巴什。鱼类的行为类似。

$ which python
/usr/bin/python
$ alias py=python
$ type py
py is aliased to `python'

然后,运行type -P py不会打印任何内容,正如我期望的那样,/usr/bin/pyton以与下面看到的类似的方式打印。

$ type ls
ls is aliased to `ls --color=auto'
$ type -P ls
/bin/ls

该选项的文档-P如下:

  -P        force a PATH search for each NAME, even if it is an alias,
    builtin, or function, and returns the name of the disk file
    that would be executed

我已经确认/usr/bin(所在目录python)位于PATH.

这里发生了什么?

答案1

这:

强制对每个名称进行路径搜索,即使它是别名,

并不意味着 bash 将扩展别名然后搜索扩展的命令。这意味着,如果有一个 commandfoo和一个 alias footype -P foo则仍然会查找名为的命令foo,即使有一个别名掩盖了它。所以 bash 不会扩展pytype -P pybe python,也不会显示/usr/bin/python

答案2

发生的情况是,您的 shell 正在查找py上每个目录中指定的二进制文件PATH,但没有找到任何文件。

type -P不解释别名或函数;它强制在路径上搜索给定名称,忽略任何其他不属于“文件”类型且具有相同名称的可用命令。

type -p( and有一个额外的微妙之处type -P:它们考虑了哈希值,因此如果存在哈希值,它们将显示哈希值,而不需要查看PATH。但这不在这里涉及。)

相关内容