所以,这个线程使用 `/etc/paths` 或 `/etc/paths.d` 将项目添加到 macOS Sierra 中的 PATH 中?简要讨论 /etc/paths 和 /etc/paths.d 与 macOS (ne OS X 12, Sierra) /usr/libexec/path_helper 的关系,这有助于将 /usr/bin:/bin:/usr/sbin:/sbin (/etc/paths 的内容,每行一个)位于 PATH 的开头。
我理解其意图(以及 SIP 背后的意图),但如果实际上是这样怎么办?做知道一个人实际上在做什么做想要在自己的 ~/bin 中拥有可执行文件(例如),以取代具有相同名称的可执行文件,苹果以其无限的仁慈,以多种无益的方式之一进行了修改或限制。或者,也许希望在 Apple 默认版本之前找到 /opt/... 版本。 (例如,如果想运行窗口版本的 emacs。)
我愿意使用这个机制。我的理解是,我需要先禁用 SIP,然后才能修改 /etc/paths.d/ 但有谁知道是否可以在 /etc/paths.d/ 中放置一个文件(例如 00LookHereFirst),该文件甚至会在前面添加那些在 /etc/paths 中? (哦,当然,修改 /etc/paths。但我想表现得很好。而且,当然,如果我让他们骚扰我降级到较新的版本,它就会被扔掉。)
“如果您想被视为坚持 BSD 的成年人”形式的答案不会被认为有帮助。
(对不起,标签。它们是我以我有限的能力所能达到的最接近的结果。)
答案1
回答我自己的问题: /etc/paths 中的目录按照文件中出现的顺序添加到 /etc/paths.d 中文件中的任何目录之前。 00 中的目录 任何包含在不以 00 开头的文件中的目录之前的内容
目前我还不清楚,如何将用户自己的启动文件中的 PATH 修改合并到路径帮助器机制中(如果有的话)。 path-helper 在 /etc/profile 中调用,传统上在 $HOME/.[whatever] 之前进行评估(在我的例子中似乎只有 .bash_profile,但随后我正在运行 bash。曾经有一段时间,预期的区别.bash_profile 和 .bashrc 之间的内容受到尊重。时间很好。)尽管如此,在评估 $HOME 初始化文件后会调用路径帮助程序。
我很抱歉问这个问题,因为这个问题很容易回答。我曾假设,因为 /etc 下的树受到限制,因此我必须从恢复分区启动才能进行检查。因为我正处于从 10.aLongTimeAgo 迁移到 10.12.5 的漫长过程的尾声(我希望如此),而且我还不想重新启动。但 /etc 是一个链接,据我所知, /etc/ 树中的任何文件都不受限制。
评论:将 /etc/ports 放在其他所有内容之前是强制性的且不受欢迎的。如果苹果认真对待构建 PATH 的生成,并且我很高兴看到这种情况发生,那么他们在 /etc/paths 中放入的内容应该放入 /etc/paths.d/00SystemDefault 或类似的内容中。在这种情况下,人们可以使用 /etc/paths.d/000ScrewYourDefaults 覆盖它,并且仍然可以很好地发挥作用。
谢谢你的忍耐