PATH正在设置在launchd.conf以外的地方,我不知道在哪里

tam*_*use 3 macos path launchd

已经解决了如何为用户会话(而不仅仅是终端)中的所有程序设置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
Run Code Online (Sandbox Code Playgroud)

这是/ etc/paths中的内容:

.
$HOME/bin
/sw/bin
/sw/sbin
/sw/local/bin
/usr/bin
/bin
/usr/sbin
/sbin
/usr/local/bin
Run Code Online (Sandbox Code Playgroud)

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

X11:

/usr/X11/bin
Run Code Online (Sandbox Code Playgroud)

选择:

/opt/local/bin
/opt/local/sbin
Run Code Online (Sandbox Code Playgroud)

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

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$ 
Run Code Online (Sandbox Code Playgroud)

我检查了我的.bashrc和.bash_profile,我没有.profile,我已经检查了/ etc/profile和/ etc/bashrc,并且它们中的NONE都触及了PATH envar.

我很难过.

chi*_*gsy 5

man path_helper
Run Code Online (Sandbox Code Playgroud)

这件事让我抓狂.我使用zsh,在/ etc/zshenv中找到了它.

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

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

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

 /etc/launchd.conf
Run Code Online (Sandbox Code Playgroud)

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

最后,您可以在loginwindow上设置它们,内容如下:

 ~/.MacOSX/environment.plist
Run Code Online (Sandbox Code Playgroud)

现在,对我来说,有几种方法可以做到这一点似乎很奇怪,但是......好吧,这很奇怪.他们做了一个不错的初始替换,它是一个统治他们所有人的过程,但是没有,很多工作都在它之外运行.祝好运.你应该能够使用这些方法之一获得$ VAR到你的gui.

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

OSX有各种会话和域.确切地说,来自

 man launchctl
Run Code Online (Sandbox Code Playgroud)

会议:

目前已知的会话类型包括:Aqua,LoginWindow,Background,StandardIO和System.

域:

在给定的域中查找以*.plist结尾的plist(5)文件.有效域包括"system","local","network"和"all".

你读它时有意义.

啊.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
Run Code Online (Sandbox Code Playgroud)

并打开终端,iterm,safari,keychain ... nada.他们都没有打开那个文件.

编辑:然而,在看完启动后的谷歌视频我跑了

 launchctl export 
Run Code Online (Sandbox Code Playgroud)

这显示了我

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 
Run Code Online (Sandbox Code Playgroud)

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

PATH="/usr/bin:/bin:/usr/sbin:/sbin"; export PATH;
Run Code Online (Sandbox Code Playgroud)

因此,上下文确实很重要,换句话说,运行命令的会话也是如此.

这个工具的文档,这个init替换,苹果中最重要的守护进程,一个统治它们的守护进程,是很糟糕的.小便.较差的.