Bash 如果两个命令行程序共享相同的名称,会发生什么情况?

Bash 如果两个命令行程序共享相同的名称,会发生什么情况?,bash,shell,unix,command-line,terminal,Bash,Shell,Unix,Command Line,Terminal,我一直想知道这一点,但在任何地方都没有找到一个好的答案——如果两个命令行程序的名称空间不正确并且共享相同的名称,会发生什么情况?你怎么称呼其中一个呢?例如,有两个程序响应brew安装——默认情况下会调用它们?如何指定另一个路径?将运行$PATH中的第一个路径。如果要运行特定的二进制文件,请使用其完整路径运行命令 例如,如果您有/usr/bin/brew和/usr/local/bin/brew,并且设置了路径=/bin:/usr/bin:/usr/local/bin,那么当您调用没有路径的命令时,

我一直想知道这一点,但在任何地方都没有找到一个好的答案——如果两个命令行程序的名称空间不正确并且共享相同的名称,会发生什么情况?你怎么称呼其中一个呢?例如,有两个程序响应
brew安装
——默认情况下会调用它们?如何指定另一个路径?

将运行
$PATH
中的第一个路径。如果要运行特定的二进制文件,请使用其完整路径运行命令

例如,如果您有
/usr/bin/brew
/usr/local/bin/brew
,并且设置了
路径=/bin:/usr/bin:/usr/local/bin
,那么当您调用没有路径的命令时,您将运行
/usr/bin/brew
。如果将
$PATH
中的目录顺序更改为
PATH=/usr/local/bin:/bin:/usr/bin
,则将运行
/usr/local/bin/brew
/usr/local/bin/brew
将始终在
/usr/local/bin
中运行该命令(前提是该命令存在)。

在命令行中键入命令时,可以调用四种方法。它们按以下顺序使用:

  • 别名
  • 作用
  • 内置
  • 档案
  • 您可以使用
    type-a[program]
    查看哪些可用以及找到它们的顺序。当您有别名时,可以跳过它并运行下一个别名,该别名带有
    \
    (即
    \echo
    )。您可以使用
    builtin
    builtin-echo
    )调用内置命令,并使用
    command
    command-echo
    )调用找到的第一个文件。您可以通过提供路径(至少有一个
    /
    )来指定要执行的特定文件。当您不指定文件路径时,shell将查看您的
    路径
    ,这是一个以冒号分隔的目录列表。它将在
    路径中指定的每个文件夹中检查具有您的命令名的文件,并执行找到的第一个文件夹