Chr*_*s4d 10 path homebrew fish macos
好吧,如果这是愚蠢的事情,我很抱歉,但我的想法已经不多了。
目标:预先考虑/usr/local/bin到$PATH
问题: $PATH不会做我想要或期望的事情
我是如何来到这里的:我想开始学习编程,所以我在幕后闲逛很舒服,但没有很多经验。我安装了fish外壳(因为它很友好!)使用homebrew并将其设置为我的默认外壳(在 下system prefs>users & groups>advanced)。在某些时候,我跑去brew doctor看看我的安装是否都是 kosher 的,它建议我移到/usr/local/bin前面,$PATH以便我可以使用我的安装git而不是系统副本。很好 - 但是在path_helper和之间fish,发生了一些$PATH我无法控制的事情,我永远无法以正确的方式安排路径。
环境: OSX 10.8.2,从10.7ish升级,与xcode和安装devtools,加x11,homebrew和fish
更多信息:我已将用户的默认 shell 重新设置为bash,并通过terminal.app- bash、fish、尝试了各种 shell sh。我移动/usr/local/bin到顶部,/etc/paths但它没有改变任何东西。我查看了各种config.fish文件并注释掉了可能与 $PATH 混淆的内容,但没有帮助。我有以下文件/etc/paths.d/:
./10-homebrew 包含 /usr/local/bin
./20-fish 包含 /usr/local/Cellar/fish/1.23.1/bin
./40-XQuartz 包含 /opt/X11/bin
我添加set +x到我的profile,当我开始时,terminal.app我得到:
Last login: Mon Oct 1 13:31:06 on ttys000
+ '[' -x /usr/libexec/path_helper ']'
+ eval '/usr/libexec/path_helper -s'
++ /usr/libexec/path_helper -s PATH="/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/Cellar/fish/1.23.1/bin:/opt/X11/bin";
export PATH;
+ '[' /bin/bash '!=' no ']'
+ '[' -r /etc/bashrc ']'
+ . /etc/bashrc
++ '[' -z '\s-\v\$ ' ']'
++ PS1='\h:\W \u\$ '
++ shopt -s checkwinsize
++ '[' Apple_Terminal == Apple_Terminal ']'
++ '[' -z '' ']'
++ PROMPT_COMMAND='update_terminal_cwd; '
++ update_terminal_cwd
++ local 'SEARCH= '
++ local REPLACE=%20
++ local PWD_URL=file://Chriss-iMac.local/Users/c4
++ printf '\e]7;%s\a' file://Chriss-iMac.local/Users/c4
Chriss-iMac:~ c4$
Run Code Online (Sandbox Code Playgroud)
所以看起来 path_helper 运行,但运行echo $PATHnets me /usr/bin:/bin:/usr/sbin:/sbin。所以,看起来path_helper甚至不再做它应该做的事情了?
我确定这里有一些我不理解的明确定义的行为,或者我在尝试修复它时搞砸了一些东西。请帮忙!
解决方案:
选择是否需要系统范围的设置或用户配置并编辑适当的配置文件,不要将 path_helper 与 fish 一起使用。
更多的
fish 不提供 /etc/profile,对于系统范围和用户配置,它会分别读取 /etc/fish/config.fish 和 ~/.config/fish/config.fish [1]。
path_helper 用于提供系统范围的配置文件(sh、csh 及其派生类)的 shell。由于 10.7 path_helper 似乎尊重 /etc/paths 中的顺序,AFAIR 它在 10.6 中没有,而且更难应对。
如果您真的想将 path_helper 与 fish 一起使用,您将需要解析其输出,因为它只会提供带有-s和-c选项的sh 和 csh 语法。
就像是
/usr/libexec/path_helper -c | sed -e 's/setenv/set -x/' -e 's/:/ /g' -e 's/[";]//g'
Run Code Online (Sandbox Code Playgroud)
应该做的工作:
[1] http://ridiculousfish.com/shell/user_doc/html/index.html#initialization
感谢 Aaron 的回复以及所有在 stackexchange 网站上回答其他类似问题的人。为了后代的缘故,我想到了以下几点:
path_helper/etc/profile通过语法从 , 调用eval '/usr/libexec/path_helper -s'(其中撇号实际上是反引号)。就像一个傻瓜一样,我不知道反引号是如何工作的,因此出于某种原因将它们更改为引号。这让我profile无法加载path_helper。替换了反引号,现在它可以正常工作(当然)。set PATH /usr/local/bin $PATH在 my 中使用~/.config/fish/profile.fish可确保我在首选 shell 中获得正确的顺序,但只要path_helper有效,它可能是多余的。$PATH可用于脚本、GUI 应用程序等,这似乎是一个难以抉择的问题launchd.conf……environment.plist仍在研究这一问题。| 归档时间: |
|
| 查看次数: |
5007 次 |
| 最近记录: |