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

Zac*_*ith 6 bash alias path .bash-profile

至少在某些情况下,别名和添加 $PATH 位置可以互换使用。例如,查看 python 工具couchapp,我需要为可执行文件添加别名(如这里有用的描述)或通过 $PATH 使可执行文件可用。

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

alias couchapp="~/Library/Python/2.7/bin/couchapp"
Run Code Online (Sandbox Code Playgroud)

或者

export PATH=$PATH:~/Library/Python/2.7/bin/
Run Code Online (Sandbox Code Playgroud)

这两者是否有非常明确的“更好”选择?为什么或者为什么不?

mkl*_*nt0 7

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

    • 注意:即使从 Python 等语言调用shell命令(使用,例如,os.system()),通常不会调用用户特定的 shell 初始化文件,因此用户特定的别名仍然不可见。
  • 添加到$PATH 环境变量的目录受到任何试图仅通过filename调用可执行文件的进程的尊重,无论是否通过 shell。

    • 类似地,这假设任何调用进程都会看到$PATH感兴趣的环境变量添加,因此通常看不到用户特定的初始化文件所做的添加,除非调用进程是从交互式 shell启动的。

查找成本

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

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

优先级

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

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