gpt4 book ai didi

linux - PATH 应该包含目录还是二进制文件的完整路径?

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:54:37 25 4
gpt4 key购买 nike

我正在尝试设置一个正确的 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

还是完全不同的东西?

This is not per se a suitable question for Stack Overflow. I expect this to be closed as General Computing or Too Broad; but the answer is frequently needed by beginners, so I hope this won't be deleted.

最佳答案

PATH仅适用于目录,不适用于单个文件

来自POSIX standard (强调我的)

PATH
This variable shall represent the sequence of path prefixes that certain functions and utilities apply in searching for an executable file known only by a filename. The prefixes shall be separated by a colon ( ':' ). [...] The list shall be searched from beginning to end, applying the filename to each prefix, until an executable file with the specified name and appropriate execution permissions is found.

当您输入 ls 时进入你的 shell 和你的 PATH设置为 /usr/local/bin/ls:/usr/bin/ls那么你的 shell 将……

  1. ... 查找路径为 /usr/local/bin/ls/ls 的可执行文件(注意最后的双 ls)。

  2. 由于该路径在您的系统上不存在,您的 shell 将继续寻找路径为 /usr/bin/ls/ls 的可执行文件。 (再次双ls)。该路径也不存在。

  3. 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 中指定目录。 .我们必须移动/重命名一些文件或创建符号链接(symbolic link)并使用路径内的符号链接(symbolic link)。一种可能的解决方案:

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 .

关于linux - PATH 应该包含目录还是二进制文件的完整路径?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57285676/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com