我们有很多涉及绝对路径的问题,有时针对文件,有时针对命令。我想要一个中心知识库问题,了解绝对路径 与命令(不仅仅是文件)相关时到底做什么。
命令的绝对路径可以实现什么以及它如何影响 Unix 和 Linux 中的工作?
- 绝对路径与相对路径的行为有何不同?
- 绝对路径是否会覆盖环境
$PATH
设置? - 命令替换中是否发生任何其他情况:
$(/bin/echo Hello world)
- 绝对路径在脚本编写中更好吗?
- 为什么有时一个命令
有很多绝对路径?
/usr/bin/echo
/bin/echo
- 两者都在同一系统上工作
- 是跨发行版更一致还是 POSIX 首选?
- 为什么有些命令(例如)
cd
没有绝对路径? - 为什么我们会或不会或应该在脚本编写中使用绝对路径?
- 绝对路径与脚本编写相关
- shell 解释器是否关心绝对路径,例如
bash
vszsh
?
消歧义
绝对路径和相对路径都会覆盖
$PATH
. 重要的是 a 是否/
存在。如果是/some/command
or./some/command
或some/command
,则该位置的命令(无论是绝对命令还是相对命令)都将被执行,而不是在 中查找$PATH
。如果some-command
不带斜杠,则会在 中查找$PATH
。命令替换不会影响这一点。这取决于系统。在具有 UsrMerge 的 Linux 系统上(即使页面提到了 Fedora,这包括最近的 Ubuntu、Debian、Arch Linux 等),
/bin
是 的符号链接/usr/bin
,因此/bin/echo
和/usr/bin/echo
是相同的。在 Solaris 上,XPG 部分中提供了更多符合标准的实用程序:何时使用命令的 XPG* 版本?其他系统可能有其他原因。有时他们会这样做:“cd”外部命令有什么意义?,有时他们不这样做:为什么 cd 不是一个程序?
至于所有“应该”和“不应该”,这取决于你想做什么。有时我看到人们使用绝对路径,因为他们认为这可以保护他们免受用户可能安装的任何替代版本工具的影响。有时我发现这会给试图将软件移植到另一个系统的人带来麻烦,其中这些绝对路径上的工具不是预期的工具,但用户安装的替代版本可以工作。