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

时间:2013-07-14 13:29:47

标签: bash shell unix command-line terminal

我一直想知道这一点,并且无法在任何地方找到一个好的答案 - 如果两个命令行程序没有正确地命名空间并且共享相同的名称会发生​​什么?你怎么称呼一个或另一个?比方说,有两个程序响应brew install - 默认情况下会被调用?你会如何指定另一个?

2 个答案:

答案 0 :(得分:4)

在命令行上键入命令时,可以调用四件事。它们按此顺序使用:

  1. 别名
  2. 功能
  3. 内置
  4. 文件(S)
  5. 您可以使用type -a [program]查看哪些可用,以及找到它们的顺序。如果您有别名,则可以跳过它并使用\运行下一个别名(即\echo)。您可以使用builtinbuiltin echo)调用内置命令,并使用commandcommand echo)调用第一个文件。您可以通过向其提供路径(至少有一个/)来指定要执行的特定文件。当您没有指定文件的路径时,您的shell将查看您的PATH,这是一个以冒号分隔的目录列表。它将在PATH中指定的每个文件夹中检查包含您的命令名的文件,它将执行它找到的第一个文件夹。

答案 1 :(得分:3)

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

例如,如果您有/usr/bin/brew/usr/local/bin/brew,并设置PATH=/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中运行命令(前提是它存在)。