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