附加到 $PATH 与使用别名:哪个更好?

Appending to $PATH vs using aliases: Which is better?

至少在某些情况下,别名和添加 $PATH 位置可以互换使用。例如,查看 python 工具 couchapp, I need to either alias the executable (as helpfully described here) 或通过 $PATH 提供可执行文件。

这些是可以实现此目的的两条线:

alias couchapp="~/Library/Python/2.7/bin/couchapp"

export PATH=$PATH:~/Library/Python/2.7/bin/

这两个有没有非常确定的'better'选项?为什么或为什么不?

如您的示例所示,$PATH 允许您为该位置的所有可执行文件执行一行。出于这个原因,我使用后一种选择。您还可以将许多 $PATH 语句链接在一起,从而允许您从命令行轻松地将更多位置添加到 "executables"。

如果出于某种原因您不想让所有可执行文件都可用 alias 会更好。

  • 别名是 shell 特性:调用实用程序的任何环境直接,不涉及shell不会看到别名。

    • 注意:即使从 Python 等语言调用 shell 命令时(例如使用 os.system()),用户特定shell 初始化文件通常 被调用,因此用户特定的别名 still 将不可见。
  • 添加到 $PATH 环境变量 的目录受到任何试图通过 仅仅是文件名,是否通过shell。

    • 同样,这假设任何调用进程都看到感兴趣的 $PATH 环境变量添加,因此 用户特定 初始化文件所做的添加通常是 没有看到,除非调用进程是从交互式shell.

查找成本

如果您知道 shell 将参与调用您的实用程序,您可以通过定义 别名 来降低开销,这些别名通过其完整路径调用您的可执行文件。
当然,您需要为 每个 可执行文件执行此操作,您希望仅按名称调用。

相比之下,将目录添加到 $PATH 变量可能会增加通过 仅文件名 定位给定可执行文件的开销,因为列出的所有目录都必须通过一个,直到找到一个包含指定名称的可执行文件(如果有的话)。

优先级

如果涉及 shell,别名优先于 $PATH 查找。
当然,后面的别名定义可以覆盖前面的。

如果不涉及 shell 或不存在给定名称的别名,$PATH 查找将按照目录在变量中列出的顺序进行。