【问题标题】:PATH is getting set somewhere other than launchd.conf and I don't know wherePATH 设置在 launchd.conf 以外的其他地方,我不知道在哪里
【发布时间】:2011-07-02 07:44:04
【问题描述】:

如何为用户会话(不仅仅是终端)中的所有程序设置 PATH 的问题已经出现并得到解决。所以我更改了 /etc/launchd.conf 和 /etc/paths,只是为了确保一切正常。但是,当我启动终端时,我得到的 PATH envar 仍然与我预期的不同(我完全不确定如何从另一个应用程序测试 PATH。)

这是 /etc/launchd.conf 中的内容:

setenv PATH /sw/bin:/sw/sbin:/sw/local/bin:/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:/usr/X11/bin:/opt/local/bin:/opt/local/sbin

这是 /etc/paths 中的内容:

.
$HOME/bin
/sw/bin
/sw/sbin
/sw/local/bin
/usr/bin
/bin
/usr/sbin
/sbin
/usr/local/bin

加上 /etc/paths.d/ 中的几个文件:

X11:

/usr/X11/bin

选择:

/opt/local/bin
/opt/local/sbin

现在,当我启动一个新终端时,我得到的是:

miishka:~ tamara$ echo $PATH
 /usr/bin:/bin:/usr/sbin:/sbin:.:/Users/tamara/bin:/sw/bin:/sw/sbin:/sw/local/bin:/usr/local/bin:/usr/X11/bin:/opt/local/bin:/opt/local/sbin
miishka:~ tamara$ 

我检查了我的 .bashrc 和 .bash_profile,我没有 .profile,我检查了 /etc/profile 和 /etc/bashrc,但没有一个接触到 PATH 环境变量。

我太难了。

【问题讨论】:

  • 只是一个后续,鉴于 /etc/launchd.conf 和 /etc/paths 中的路径规范之间的差异,它看起来更像是 PATH 是由终端的 /etc/paths 构建的.但我仍然不清楚为什么它们没有按照我指定的顺序创建。

标签: macos path launchd


【解决方案1】:
man path_helper

这件事把我逼疯了。我使用 zsh,在 /etc/zshenv 中找到了它。

# system-wide environment settings for zsh(1)
if [ -x /usr/libexec/path_helper ]; then
    eval `/usr/libexec/path_helper -s`
fi

path_helper(8) 实际上有一个有用的目的,我认为。它被苹果通常超模糊的系统管理员信息所否定。在 /etc 中的 shell 初始化文件中查找 path_helper(8),即使您像我一样使用 macports。这可能会有所帮助。

否则,您可以尝试在以下位置设置环境:

 /etc/launchd.conf

当然,手册页不是确定的。 http://developer.apple.com 是优秀的文档,但通常我想要更好的手册页,而不是精确的内存位置。

最后,您可以在登录窗口上设置它们:

 ~/.MacOSX/environment.plist

现在,对我来说,有几种方法可以做到这一点似乎很奇怪,但是......好吧,这很奇怪。他们做了一个不错的 init 替换,这是一个可以统治所有这些的进程,但是不,许多工作都在它之外运行。祝你好运。您应该能够使用其中一种方法将 $VAR 放入您的 gui。

啊,http://developer.apple.com/library/mac/#qa/qa1067/_index.html

OSX 有各种会话和域。准确地说,来自

 man launchctl

会话:

目前已知的会话类型包括:Aqua、LoginWindow、 背景、StandardIO 和系统。

域:

在域中查找以 *.plist 结尾的 plist(5) 文件 给定的。有效域包括“系统”、“本地”、 “网络” 和“全部”。

当你阅读它时,它是有道理的。

呃。 launchd 总是能找到我。

编辑: https://serverfault.com/questions/16355/how-to-set-global-path-on-os-x/277034#277034

再次声称 /etc/launchd.conf 是文件获取路径的位置。

所以我跑了

 opensnoop -g -c -f /etc/launchd.conf

然后打开终端、iterm、safari、钥匙串……nada。他们都没有打开那个文件。

编辑:但是,在 launchd 上观看谷歌视频后,我跑了

 launchctl export 

向我展示了

PATH="/usr/bin:/bin:/usr/sbin:/sbin"; export PATH;
TMPDIR="/var/folders/YH/YHFe3+5RHmuxft5hr1XZTk+++TI/-Tmp-/"; export TMPDIR;
SHELL="/opt/local/bin/zsh"; export SHELL;
HOME="/Users/kb"; export HOME;
USER="kb"; export USER;
LOGNAME="kb"; export LOGNAME;
DISPLAY="/tmp/launch-dcQkBh/org.x:0"; export DISPLAY;
SSH_AUTH_SOCK="/tmp/launch-czhyqj/Listeners"; export SSH_AUTH_SOCK;
Apple_PubSub_Socket_Render="/tmp/launch-TI7lbI/Render"; export Apple_PubSub_Socket_Render;



sudo launchctl export 

将我的上下文更改为系统上下文,而不是我作为用户的 Aqua 上下文,返回

PATH="/usr/bin:/bin:/usr/sbin:/sbin"; export PATH;

所以上下文确实很重要,换句话说,运行命令的会话也很重要。

这个工具的文档,这个初始化替换,苹果中最重要的守护进程,一个统治他们的守护进程,很糟糕。小便。贫穷的。

【讨论】:

  • 嗯,是的,它确实有道理,这就是前面关于如何设置 PATH 的说明。对我来说没有意义的是该顺序不是 /etc/launchd.conf 或 /etc/paths + /etc/paths.d 中设置的。如您所见,我通过 /etc/paths 设置它的方式,PATH 变量 应该 是:.:$HOME/bin:/sw/bin:/sw/sbin:/sw /local/bin:/usr/bin:/bin:/usr/sbin:/sbin/:/usr/local/bin,但它不是 - 这是我上面展示的,带有 /usr/* 目录 首先。如果我只是运行 /usr/libexec/path_helper -s,它会显示重新排列。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-12-26
  • 1970-01-01
  • 2023-04-05
  • 1970-01-01
  • 2020-06-14
  • 2018-09-09
相关资源
最近更新 更多