PATH 是否应包含目录或二进制文件的完整路径?
- 2024-10-21 09:14:00
- admin 原创
- 73
问题描述:
我正在尝试设置一个正确的PATH
,但我不知道它应该包含什么。如果我有
/usr/bin/ls
/usr/local/bin/ls
并且我想要选择 中的一个/usr/local/bin
,我应该使用下列哪一个?
PATH=/usr/local/bin/ls:/usr/bin/ls
PATH=/usr/local/bin:/usr/bin
或者完全是别的东西?
这个问题本身并不适合 Stack Overflow。我希望这个问题被关闭,因为“通用计算”或“范围太广”;但初学者经常需要这个答案,所以我希望它不会被删除。
解决方案 1:
PATH
仅适用于目录,不适用于单个文件
来自POSIX 标准(重点是我的)
PATH
此变量应表示某些函数和实用程序在搜索仅由文件名识别的可执行文件时应用的路径前缀序列。前缀应以冒号 (':') 分隔。[...] 应从头到尾搜索列表,将文件名应用于每个前缀,直到找到具有指定名称和适当执行权限的可执行文件。
ls
当你在 shell 中输入并且你的PATH
设置为/usr/local/bin/ls:/usr/bin/ls
时,你的 shell 将...
... 查找具有路径的可执行文件(注意末尾的
/usr/local/bin/ls/ls
双精度)。ls
由于该路径在您的系统中不存在,您的 shell 将继续寻找具有该路径的可执行文件
/usr/bin/ls/ls
(ls
再次双击)。该路径也不存在。shell 无法使用所有路径找到可执行文件,
PATH
因此你的 shell 将打印类似的内容bash: ls: command not found
。
那么,我们学到了什么? 列出的路径PATH
必须是目录。您不能列出单个文件。因此,您的正确答案是PATH=/usr/local/bin:/usr/bin
。
事情变得有趣
想象一下以下情况。您有两个版本的程序c1
和两个版本的程序c2
。不同的版本存储在目录/a/
和中/b/
。
/a/c1
/a/c2
/b/c1
/b/c2
我们如何才能设置PATH
为偏好/a/c1
但/b/c1/
同时又/b/c2
超过/a/c2
?
遗憾的是,没有办法直接实现这一点,因为我们只能在 中指定目录PATH
。我们必须移动/重命名一些文件或创建符号链接并在路径中使用符号链接。一种可能的解决方案:
mkdir /c
ln -s /a/c1 /c/c1
ln -s /b/c2 /c/c2
export PATH=/c:/a:/b
:/a:/b
这里其实不需要尾随。我之所以包括它们,是因为我假设/a
和/b
包含的可执行文件比c1
和还多c2
。
解决方案 2:
事实上,通过实验你很容易就能发现,变量应该已经包含了按该顺序查询的目录PATH
列表。事实上,你应该已经发现默认的和通常是按这个顺序(尽管它们之间可能还有其他目录,而且肯定还有更多目录围绕着它们)。/usr/local/bin
`/usr/bin`PATH
要检查您当前的PATH
价值,请尝试
echo "$PATH"
或者更人性化一点的渲染
echo "${PATH//:/$'
'}" # bash only
或者
echo "$PATH" | tr ':' '
' # any POSIX system
如果你设法将你的设置PATH
为无效值(这将导致像ls
和cat
这样的简单命令不再被找到,并产生command not found
错误),你可以尝试
PATH=/usr/local/bin:/usr/bin:/usr
希望至少恢复基本功能,以便您可以使用cp
或简单的系统编辑器恢复到原始的、安全的系统默认设置PATH
。
- 2024年20款好用的项目管理软件推荐,项目管理提效的20个工具和技巧
- 2024年开源项目管理软件有哪些?推荐5款好用的项目管理工具
- 项目管理软件有哪些?推荐7款超好用的项目管理工具
- 项目管理软件哪个最好用?盘点推荐5款好用的项目管理工具
- 项目管理软件有哪些最好用?推荐6款好用的项目管理工具
- 项目管理软件有哪些,盘点推荐国内外超好用的7款项目管理工具
- 2024项目管理软件排行榜(10类常用的项目管理工具全推荐)
- 项目管理软件排行榜:2024年项目经理必备5款开源项目管理软件汇总
- 2024年常用的项目管理软件有哪些?推荐这10款国内外好用的项目管理工具
- 项目管理必备:盘点2024年13款好用的项目管理软件