8wDlpd.png
8wDFp9.png
8wDEOx.png
8wDMfH.png
8wDKte.png

PATH 是否应包含目录或二进制文件的完整路径?

uscq 2月前

23 0

我正在尝试设置正确的 PATH,但我不知道它应该包含什么。如果我有 /usr/bin/ls/usr/local/bin/ls,并且我想优先使用 /usr/local/bin 中的那个,那么以下哪个应该...

我正在尝试设置一个正确的 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 是否应包含目录或二进制文件的完整路径?
    本站网址:http://xjnalaquan.com/
2、本网站的资源部分来源于网络,如有侵权,请联系站长进行删除处理。
3、会员发帖仅代表会员个人观点,并不代表本站赞同其观点和对其真实性负责。
4、本站一律禁止以任何方式发布或转载任何违法的相关信息,访客发现请向站长举报
5、站长邮箱:yeweds@126.com 除非注明,本帖由uscq在本站《bash》版块原创发布, 转载请注明出处!
最新回复 (0)
  • PATH 仅适用于目录,不适用于单个文件

    来自 POSIX 标准 (重点是我的)

    小路
    此变量应表示某些函数和实用程序在搜索仅由文件名识别的可执行文件时应用的路径前缀序列。前缀应以冒号 (':') 分隔。[...] 应从头到尾搜索列表,将 文件名应用于每个前缀 ,直到找到具有指定名称和适当执行权限的可执行文件。

    在 shell 中 ls 输入 PATH 设置为 /usr/local/bin/ls:/usr/bin/ls ,你的 shell 将...

    1. p3

    2. p4

    3. p5

    那么,我们学到了什么? 列出的路径 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 .

  • 事实上,通过实验你很容易就能发现,变量 PATH 目录 列表 。事实上,你应该已经发现 /usr/local/bin 默认 /usr/bin PATH 通常是按这个顺序(尽管它们之间可能还有其他目录,而且肯定还有更多目录围绕着它们)。

    要检查您当前的 PATH 价值,请尝试

    echo "$PATH"
    

    或者稍微更人性化一点的渲染

    echo "${PATH//:/$'\n'}"     # bash only
    

    或者

    echo "$PATH" | tr ':' '\012'  # any POSIX system
    

    如果你设法将你的设置 PATH 为无效值(这将导致像 ls 和这样 cat 不再被找到,并产生 command not found 错误),你可以尝试

    PATH=/usr/local/bin:/usr/bin:/usr
    

    希望至少恢复基本功能,以便您可以使用 cp 或简单的系统编辑器恢复到原始、安全的系统默认设置 PATH .

  • POSIX 显示 $PATH 的方式:IFS=:; for dir in $PATH; do echo \'$dir\'; done

  • 如果你确定之前没有设置过其他值,那么这种方法是可行的。但一般情况下你无法知道这一点。

返回
作者最近主题: