gpt4 book ai didi

path - OS X 山狮 : how does path_helper work?

转载 作者:行者123 更新时间:2023-12-03 21:47:59 25 4
gpt4 key购买 nike

我是通过homebrew安装rbenv的,现在不知道为什么path_helper把~/.rbenv/shims放在路径的末尾而不是开头。最重要的是,path_helper 是如何获得这些信息的?

根据 path_helper 的手册页,它从/etc/paths 和/etc/paths.d 中的文件读取条目。但是我在那里找不到字符串“.rbenv/shims”。

~% cat /etc/paths 
/usr/bin
/bin
/usr/sbin
/sbin
/usr/local/bin
~% ls -la /etc/paths.d
total 0
drwxr-xr-x 2 root wheel 68 Jun 21 03:16 .
drwxr-xr-x 107 root wheel 3638 Sep 10 09:59 ..
~% /usr/libexec/path_helper
PATH="/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/Users/gordon/.rbenv/shims"; export PATH;

最佳答案

我怀疑你的 .bash_profile.bashrc正在添加.rbenv/shims到您的 PATH,并且在之前的某个时间点运行path_helper在 shell 启动期间调用。

path_helper 的手册页打开为:

 The path_helper utility reads the contents of the files in the directo-
ries /etc/paths.d and /etc/manpaths.d and appends their contents to the
PATH and MANPATH environment variables respectively.

这里的关键点是 path_helper 实用程序旨在
将内容添加到现有 PATH设置,而不是替换它们。 (并且在
实际上,它真正做的是添加内容,而不是添加内容,
这对 PATH 很重要变量...)

因此,如果我从 PATH 上的条目开始,由生成的设置
path_helper 将确保在 PATH 上继续输入它生成。
% echo $SHELL
/bin/bash
% uname
Darwin
% /usr/libexec/path_helper
PATH="/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin"; export PATH;
% PATH="" /usr/libexec/path_helper
PATH="/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin"; export PATH;
% PATH=foo /usr/libexec/path_helper
PATH="/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:foo"; export PATH;

请注意 foo已包含在我最后一行的 PATH 中,即使 /etc/paths的内容和 /etc/paths.d/*没有改变。

同时,path_helper 实用程序似乎也小心了
生成具有重复条目的路径;它删除重复的条目
连接后 /etc/paths/etc/paths.d/*和当前 PATH .

后一个细节可能特别令人困惑,因为它可能导致
与原始条目相比的重新排序 PATH环境 (!)。

以下是此行为的一些示例: 第一种情况显示重复 foo被移除。第二种和第三种情况说明了条目重新排序:两种情况下生成的 PATH 相同,但在第三种情况下, /usr/bin条目已从中间移出 foobar到前面 PATH . (删除重复条目似乎只是基于条目对的简单字符串匹配,如下面的第四种情况所示,其中字符串 /usr/bin/ 保留在 foo/bar 之间。)
% PATH=foo:foo /usr/libexec/path_helper 
PATH="/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:foo"; export PATH;
% PATH=foo:bar /usr/libexec/path_helper
PATH="/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:foo:bar"; export PATH;
% PATH=foo:/usr/bin:bar /usr/libexec/path_helper
PATH="/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:foo:bar"; export PATH;
% PATH=foo/:/usr/bin/:bar /usr/libexec/path_helper
PATH="/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:foo/:/usr/bin/:bar"; export PATH;

最后,在信用到期时给予信用:
虽然上面的所有命令序列都是我自己调查的结果,但我最初的灵感是研究 path_helper 的行为。阅读笔记后 here ,
其中指出 path_helper重用 PATH父进程设置的环境变量。

关于path - OS X 山狮 : how does path_helper work?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12409270/

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